<?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>106059</bug_id>
          
          <creation_ts>2013-01-03 15:53:37 -0800</creation_ts>
          <short_desc>Objective-C API: Need a way to use the Objective-C JavaScript API with WebKit</short_desc>
          <delta_ts>2013-02-21 12:02:20 -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>JavaScriptCore</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>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>philn</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>799788</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-03 15:53:37 -0800</bug_when>
    <thetext>Currently, we don&apos;t have one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826807</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-06 15:36:01 -0800</bug_when>
    <thetext>&lt;rdar://problem/12954220&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826851</commentid>
    <comment_count>2</comment_count>
      <attachid>186940</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-06 16:18:21 -0800</bug_when>
    <thetext>Created attachment 186940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826889</commentid>
    <comment_count>3</comment_count>
      <attachid>186940</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-06 16:51:09 -0800</bug_when>
    <thetext>Comment on attachment 186940
Patch

Attachment 186940 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16395442</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826890</commentid>
    <comment_count>4</comment_count>
      <attachid>186940</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-06 16:53:51 -0800</bug_when>
    <thetext>Comment on attachment 186940
Patch

Attachment 186940 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16393470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826940</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-02-06 18:00:48 -0800</bug_when>
    <thetext>Hey Mark, I don&apos;t think ScriptController::javaScriptContext() is doing the right thing – this is creating a new context (i.e. new global object) whereas this should be returning a JSContext wrapping the frame&apos;s current global object.  As such I think that rather than:
    [[JSContext alloc] initWithVirtualMachine:virtualMachineFromContextGroup(toRef(&amp;root-&gt;globalObject()-&gt;globalData()))];
you want something more like:
    [[JSContext alloc] initWithGlobalObject:root-&gt;globalObject()];

Also, the ScriptController persists across navigation, so the reference to m_javaScriptContext needs to be cleared on page navigation.  It would probably be best to add a copy of the value to the back/forwards cache, so that the same JSContext persists until WebCore drops the global object.

contextFromGlobalContextRef and virtualMachineFromContextGroup both just return m_apiData, which means that they&apos;ll return nil for objects that weren&apos;t created via the API, but we want the API to be able to work on WebCore&apos;s global objects in WebCore&apos;s globaldata – so I think we need these methods to be able to lazily create objective-C wrappers around the existing objects, if these don&apos;t yet exist.

I think we really need to write a test case for this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836836</commentid>
    <comment_count>6</comment_count>
      <attachid>189179</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-19 15:13:30 -0800</bug_when>
    <thetext>Created attachment 189179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836903</commentid>
    <comment_count>7</comment_count>
      <attachid>189179</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-19 16:01:36 -0800</bug_when>
    <thetext>Comment on attachment 189179
Patch

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

r=me

&gt; Source/JavaScriptCore/API/JSContextInternal.h:75
&gt; ++ (JSContext *)contextFromGlobalContextRef:(JSGlobalContextRef)globalContext;

Minor naming comment: Usually these class factory methods have the same name as their related designated initializer. In this case, that&apos;s &quot;contextWithGlobalContextRef&quot;.

&gt; Source/JavaScriptCore/API/JSObjCWrapperCache.mm:38
&gt; +    DEFINE_STATIC_LOCAL(Mutex, mutex, ());

This initialization is not thread-safe. To my shock and horror, there are 17 other bugs like this in WebKit. I guess threads are indeed evil. I guess I will not make you fix this, since our whole library is built on this shaky foundation, and we&apos;ll have to fix it later some other way.

&gt; Source/JavaScriptCore/API/JSObjCWrapperCache.mm:65
&gt; +    return static_cast&lt;id&gt;(NSMapGet(wrapperCache, object));

This should autorelease to keep up the contract that our +factory methods return autoreleased values.

&gt; Source/JavaScriptCore/API/JSVirtualMachineInternal.h:38
&gt; +JS_EXPORT_PRIVATE JSVirtualMachine *virtualMachineFromContextGroupRef(JSContextGroupRef);

Let&apos;s use the class factory method pattern here like you did in JSContext. It&apos;s the Cocoa way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836966</commentid>
    <comment_count>8</comment_count>
      <attachid>189179</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-19 16:41:42 -0800</bug_when>
    <thetext>Comment on attachment 189179
Patch

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

&gt;&gt; Source/JavaScriptCore/API/JSObjCWrapperCache.mm:65
&gt;&gt; +    return static_cast&lt;id&gt;(NSMapGet(wrapperCache, object));
&gt; 
&gt; This should autorelease to keep up the contract that our +factory methods return autoreleased values.

I believe that NSMapTable autoreleases for us. I tried adding a call to autorelease here and it caused crashing :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837041</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-19 18:16:42 -0800</bug_when>
    <thetext>&gt; I believe that NSMapTable autoreleases for us. I tried adding a call to autorelease here and it caused crashing :-(

I should have been clearer: you need &quot;[[x retain] autorelease]&quot;, not &quot;[x autorelease]&quot;. I don&apos;t think the table autoreleases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837175</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-02-19 22:31:32 -0800</bug_when>
    <thetext>No WebKit2 :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837757</commentid>
    <comment_count>11</comment_count>
      <attachid>189378</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-20 14:25:13 -0800</bug_when>
    <thetext>Created attachment 189378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838491</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-21 09:10:05 -0800</bug_when>
    <thetext>&gt; I should have been clearer: you need &quot;[[x retain] autorelease]&quot;, not &quot;[x autorelease]&quot;. I don&apos;t think the table autoreleases.

Correction: the table autoreleases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838501</commentid>
    <comment_count>13</comment_count>
      <attachid>189378</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-21 09:19:39 -0800</bug_when>
    <thetext>Comment on attachment 189378
Patch

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

r=me, with some comments

&gt; Source/JavaScriptCore/API/JSContext.mm:174
&gt; +- (id)initWithGlobalContextRef:(JSGlobalContextRef)context

I think we should name this &quot;initWithJSGlobalContextRef&quot; or name the other thingy &quot;globalContextRef&quot;. But they should be consistent.

&gt; Source/JavaScriptCore/API/JSVirtualMachine.mm:62
&gt; +    if (!wrapperCache)
&gt; +        initWrapperCache();

Would be nice to have a wrapperCache() helper function that did the null check for us.

&gt; Source/JavaScriptCore/API/JSVirtualMachine.mm:87
&gt; +    // The extra JSContextGroupRetain is balanced here.

I think you mean that the JSContextGroupCreate is balanced here.

&gt; Tools/TestWebKitAPI/Tests/mac/WebViewDidCreateJavaScriptContext.mm:107
&gt; +    __block JSContext *tempContext = context;
&gt; +    context[@&quot;insertMyCustomProperty&quot;] = ^(JSValue *element) {
&gt; +        JSValue *fortyTwo = [JSValue valueWithInt32:42 inContext:tempContext];

This is a memory leak because the block retains the context, which has a property retaining the block. The right way to get a context inside a block callback is [JSContext currentContext].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838662</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-21 12:02:20 -0800</bug_when>
    <thetext>Committed r143637: &lt;http://trac.webkit.org/changeset/143637&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186940</attachid>
            <date>2013-02-06 16:18:21 -0800</date>
            <delta_ts>2013-02-19 15:13:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106059-20130206161458.patch</filename>
            <type>text/plain</type>
            <size>40969</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQyMDQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDEzLTAyLTA2ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgd2F5IHRvIHVzZSB0aGUgT2JqZWN0aXZl
LUMgSmF2YVNjcmlwdCBBUEkgd2l0aCBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOiBBZGRlZCBuZXcgZnVuY3Rp
b24gdG8gYWNjZXNzIHRoZSBpbnRlcm5hbCBKU0dsb2JhbENvbnRleHRSZWYgZm9yIGNvbnZlbmll
bmNlIGZvciAKKyAgICAgICAgY2xpZW50cyB3aGVuIGNvbnZlcnRpbmcgdG8gdGhlIG5ldyBBUEku
CisgICAgICAgICogQVBJL0pTQ29udGV4dC5tbTogQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgbmV3
IGZ1bmN0aW9ucy4KKyAgICAgICAgKC1bSlNDb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOiBS
ZXR1cm4gdGhlIGludGVybmFsIEpTR2xvYmFsQ29udGV4dFJlZi4KKyAgICAgICAgKCtbSlNDb250
ZXh0IGNvbnRleHRGcm9tR2xvYmFsQ29udGV4dFJlZjpdKTogR3JhYiB0aGUgSlNDb250ZXh0IGZy
b20gdGhlIGxleGljYWxHbG9iYWxPYmplY3QgdGhhdCB3YXMgCisgICAgICAgIHN0b3JlZCBieSB0
aGUgSlNDb250ZXh0IHdoZW4gaXQgd2FzIGNyZWF0ZWQuCisgICAgICAgICogQVBJL0pTQ29udGV4
dEludGVybmFsLmg6IE1vZGlmeSAjaW1wb3J0IHRvIHdvcmsgd2hlbiBpbXBvcnRlZCBmcm9tIG90
aGVyIHByb2plY3RzLiBBZGQgI2lmbmRlZiBoZWFkZXIgZ3VhcmRzLgorICAgICAgICBBZGQgc3lt
Ym9sIGV4cG9ydCBhbm5vdGF0aW9uLiBBZGQgbmV3IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRvIGdl
dCBhIEpTQ29udGV4dCBmcm9tIGEgSlNHbG9iYWxDb250ZXh0UmVmLgorICAgICAgICAqIEFQSS9K
U1ZhbHVlLmg6IEFkZCAjaWZuZGVmIGhlYWRlciBndWFyZHMuIEFkZCBuZXcgY29udmVuaWVuY2Ug
ZnVuY3Rpb24gdG8gYWNjZXNzIGludGVybmFsIEpTVmFsdWVSZWYgZnJvbSBhIEpTVmFsdWUuCisg
ICAgICAgICogQVBJL0pTVmFsdWUubW06IAorICAgICAgICAoLVtKU1ZhbHVlIEpTVmFsdWVSZWZd
KTogSW1wbGVtZW50YXRpb24gb2YgbmV3IGNvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAgICAgKiBB
UEkvSlNWYWx1ZUludGVybmFsLmg6IEFkZGVkICNpZm5kZWYgaGVhZGVyIGd1YXJkcy4gQ2hhbmdl
ZCAjaW1wb3J0IHRvIHdvcmsgaW4gb3RoZXIgcHJvamVjdHMuCisgICAgICAgICogQVBJL0pTVmly
dHVhbE1hY2hpbmUubW06IAorICAgICAgICAodmlydHVhbE1hY2hpbmVGcm9tQ29udGV4dEdyb3Vw
KTogSW1wbGVtZW50YXRpb24gb2YgbWV0aG9kIHRvIGdldCBKU1ZpcnR1YWxNYWNoaW5lIGZyb20g
YSBKU0NvbnRleHRHcm91cFJlZi4KKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmg6IEFkZGVkICNpZm5kZWYgaGVhZGVyIGd1YXJkcy4gQ2hhbmdlZCBpbXBvcnQgdG8gd29y
ayBpbiBvdGhlciBwcm9qZWN0cy4KKyAgICAgICAgQWRkZWQgc3ltYm9sIGV4cG9ydCBhbm5vdGF0
aW9ucy4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorCiAyMDEzLTAyLTA2ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBOYXRpdmUgTWVtb3J5IEluc3RydW1lbnRhdGlvbjog
YXNzaWduIGNsYXNzIG5hbWUgdG8gdGhlIGhlYXAgZ3JhcGggbm9kZSBhdXRvbWF0aWNhbGx5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHJldmlzaW9uIDE0MjA0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDEwIEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKIC8vIEV2YWx1
YXRlIGEgc3RyaW5nIG9mIEphdmFTY3JpcHQgY29kZS4KIC0gKEpTVmFsdWUgKilldmFsdWF0ZVNj
cmlwdDooTlNTdHJpbmcgKilzY3JpcHQ7CiAKKy8vIFJldHVybiB0aGUgQyBBUEkgdmVyc2lvbiBv
ZiB0aGlzIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGNvbnZlbmllbmNlCisvLyBhdCB0
aGUgYm91bmRhcmllcyB3aGVuIGNvbnZlcnRpbmcgY29kZSBmcm9tIHRoZSBDIEFQSSB0byB0aGUg
T2JqZWN0aXZlLUMgQVBJLgorLSAoSlNHbG9iYWxDb250ZXh0UmVmKUpTR2xvYmFsQ29udGV4dFJl
ZjsKKwogLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBnbG9iYWwgb2JqZWN0IG9mIHRoZSBK
YXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgogLy8gSW5zdGFuY2VzIG9mIEpTQ29udGV4dCBv
cmlnaW5hdGluZyBmcm9tIFdlYktpdCB3aWxsIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUKIC8v
IFdpbmRvd1Byb3h5IG9iamVjdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTEgQEAKIAogQHN5bnRoZXNp
emUgZXhjZXB0aW9uSGFuZGxlcjsKIAorLSAoSlNHbG9iYWxDb250ZXh0UmVmKUpTR2xvYmFsQ29u
dGV4dFJlZgoreworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKIC0gKGlkKWluaXQKIHsKICAg
ICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpbW1tKU1ZpcnR1YWxNYWNoaW5l
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dOwpAQCAtMjI3LDYgKzIzMiwxMSBAQCAtIChKU1Zh
bHVlICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0CiAgICAgcmV0dXJuIFttX3dyYXBwZXJN
YXAgd3JhcHBlckZvck9iamVjdDpvYmplY3RdOwogfQogCisrIChKU0NvbnRleHQgKiljb250ZXh0
RnJvbUdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZiljb250ZXh0Cit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEpTQ29udGV4dCAqPih0b0pTKGNvbnRleHQpLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm1fYXBpRGF0YSk7Cit9CisKIEBlbmQKIAogV2Vha0NvbnRleHRSZWY6Oldl
YWtDb250ZXh0UmVmKEpTQ29udGV4dCAqY29udGV4dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgJKHJldmlzaW9uIDE0MjA0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsMTEgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaWZuZGVmIEpT
Q29udGV4dEludGVybmFsX2gKKyNkZWZpbmUgSlNDb250ZXh0SW50ZXJuYWxfaAorCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgogCiAjaWYgSlNfT0JKQ19BUElfRU5B
QkxFRAogCi0jaW1wb3J0ICJKU0NvbnRleHQuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dC5oPgogCiBzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKICAgICBDYWxsYmFja0RhdGEgKm5l
eHQ7CkBAIC01Niw3ICs1OSw3IEBAIHByaXZhdGU6CiAKIEBpbnRlcmZhY2UgSlNDb250ZXh0KElu
dGVybmFsKQogCi1KU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChKU0Nv
bnRleHQgKik7CitKU19FWFBPUlRfUFJJVkFURSBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dElu
dGVybmFsQ29udGV4dChKU0NvbnRleHQgKik7CiAKIC0gKHZvaWQpbm90aWZ5RXhjZXB0aW9uOihK
U1ZhbHVlUmVmKWV4Y2VwdGlvbjsKIC0gKEpTVmFsdWUgKil2YWx1ZUZyb21Ob3RpZnlFeGNlcHRp
b246KEpTVmFsdWVSZWYpZXhjZXB0aW9uOwpAQCAtNjcsOCArNzAsMTIgQEAgSlNHbG9iYWxDb250
ZXh0UmVmIGNvbnRleHRJbnRlcm5hbENvbnRleAogCiAtIChKU1ZhbHVlICopd3JhcHBlckZvck9i
amVjdDooaWQpb2JqZWN0OwogCisrIChKU0NvbnRleHQgKiljb250ZXh0RnJvbUdsb2JhbENvbnRl
eHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZiljb250ZXh0OworCiBAcHJvcGVydHkgKHJlYWRvbmx5
LCByZXRhaW4pIEpTV3JhcHBlck1hcCAqd3JhcHBlck1hcDsKIAogQGVuZAogCiAjZW5kaWYKKwor
I2VuZGlmIC8vIEpTQ29udGV4dEludGVybmFsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWYWx1ZS5oCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOSBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAorI2lmbmRlZiBKU1ZhbHVlX2gKKyNkZWZpbmUgSlNWYWx1ZV9oCisKICNpZiBK
U19PQkpDX0FQSV9FTkFCTEVECiAKIEBjbGFzcyBKU0NvbnRleHQ7CkBAIC0xMDIsNiArMTA1LDEw
IEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKICsgKEpTVmFsdWUgKil2YWx1ZVdpdGhO
dWxsSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OwogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0
aFVuZGVmaW5lZEluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsKIAorLy8gUmV0dXJuIHRo
ZSBDIEFQSSB2ZXJzaW9uIG9mIHRoaXMgdmFsdWUuIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGNvbnZl
bmllbmNlCisvLyBhdCB0aGUgYm91bmRhcmllcyB3aGVuIGNvbnZlcnRpbmcgY29kZSBmcm9tIHRo
ZSBDIEFQSSB0byB0aGUgT2JqZWN0aXZlLUMgQVBJLgorLSAoSlNWYWx1ZVJlZilKU1ZhbHVlUmVm
OworCiAvLyBDb252ZXJ0IHRoaXMgdmFsdWUgdG8gYSBjb3JyZXNwb25kaW5nIE9iamVjdGl2ZS1D
IG9iamVjdCwgYWNjb3JkaW5nIHRvIHRoZQogLy8gY29udmVyc2lvbiBzcGVjaWZpZWQgYWJvdmUu
CiAtIChpZCl0b09iamVjdDsKQEAgLTI5MiwzICsyOTksNCBAQCBKU19FWFBPUlQgZXh0ZXJuIE5T
U3RyaW5nICogY29uc3QgSlNQcm9wCiAKICNlbmRpZgogCisjZW5kaWYgLy8gSlNWYWx1ZV9oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlLm1tCShyZXZpc2lvbiAxNDIwNDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTU2LDYgKzU2LDExIEBAIE5TU3RyaW5nICogY29uc3QgSlNQcm9wZXJ0eURlc2NyaXB0b3JTZXQK
ICAgICBKU1ZhbHVlUmVmIG1fdmFsdWU7CiB9CiAKKy0gKEpTVmFsdWVSZWYpSlNWYWx1ZVJlZgor
eworICAgIHJldHVybiBtX3ZhbHVlOworfQorCiArIChKU1ZhbHVlICopdmFsdWVXaXRoT2JqZWN0
OihpZCl2YWx1ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKICAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6b2JqZWN0VG9WYWx1ZShjb250ZXh0LCB2YWx1ZSkgaW5D
b250ZXh0OmNvbnRleHRdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVl
SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFs
dWVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmFsdWVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMywxMSBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAorI2lmbmRlZiBKU1ZhbHVlSW50ZXJuYWxfaAorI2RlZmlu
ZSBKU1ZhbHVlSW50ZXJuYWxfaAorCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5oPgotI2ltcG9ydCAiSlNWYWx1ZS5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNW
YWx1ZS5oPgogCiAjaWYgSlNfT0JKQ19BUElfRU5BQkxFRAogCkBAIC01MiwzICs1NSw1IEBAIE5T
SW52b2NhdGlvbiAqdHlwZVRvVmFsdWVJbnZvY2F0aW9uRm9yKGMKIE5TSW52b2NhdGlvbiAqdmFs
dWVUb1R5cGVJbnZvY2F0aW9uRm9yKGNvbnN0IGNoYXIqIGVuY29kZWRUeXBlKTsKIAogI2VuZGlm
CisKKyNlbmRpZiAvLyBKU1ZhbHVlSW50ZXJuYWxfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkocmV2aXNpb24gMTQyMDQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw2ICs2MywxMSBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFs
TWFjCiAgICAgcmV0dXJuIHZpcnR1YWxNYWNoaW5lLT5tX2dyb3VwOwogfQogCitKU1ZpcnR1YWxN
YWNoaW5lICp2aXJ0dWFsTWFjaGluZUZyb21Db250ZXh0R3JvdXAoSlNDb250ZXh0R3JvdXBSZWYg
Z3JvdXApCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTVmlydHVhbE1hY2hpbmUgKj4odG9K
Uyhncm91cCktPm1fYXBpRGF0YSk7Cit9CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJ
KHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDEwIEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lLmgiCisjaWZuZGVm
IEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbF9oCisjZGVmaW5lIEpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbF9oCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmlydHVhbE1hY2hpbmUuaD4KICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CiAKICNpZiBKU19PQkpDX0FQ
SV9FTkFCTEVECkBAIC0zMiw2ICszNSwxMCBAQAogCiBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91
cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICopOwogCitKU19FWFBPUlRfUFJJ
VkFURSBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGluZUZyb21Db250ZXh0R3JvdXAoSlND
b250ZXh0R3JvdXBSZWYpOworCiBAZW5kCiAKICNlbmRpZgorCisjZW5kaWYgLy8gSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY4LDEzICs1NjgsMTMg
QEAKIAkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwQTE2N0JBQjg3MDA2RDc2
MEEgLyogSlNFeHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CiAJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRjE2
N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RTNDNjA4MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gKi87IH07Ci0JCTg2
RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MDkxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi87IH07CisJCTg2RTNDNjE3MTY3QkFCRUUwMDZE
NzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dElu
dGVybmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBCMTY3QkFCODcwMDZE
NzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi87IH07CiAJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYw
QSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCAqLzsg
fTsKIAkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRDE2N0JBQjg3MDA2RDc2
MEEgLyogSlNWYWx1ZS5tbSAqLzsgfTsKLQkJODZFM0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
VmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oICovOyB9
OworCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRTE2N0JBQjg3
MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZFM0M2MUMxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmly
dHVhbE1hY2hpbmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NkUzQzYxMDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSAqLzsg
fTsKLQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2
MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovOyB9Owor
CQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYxMTE2
N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZFODU1MzkxMTFCOTk2ODAw
MUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVp
bGRlci5oICovOyB9OwogCQk4NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RUJGMkY5MTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwICovOyB9OwogCQk4
NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVCRjJGQTE1NjBGMDM2MDA4RTky
MjIgLyogTmFtZUNvbnN0cnVjdG9yLmggKi87IH07CkBAIC0yODkwLDcgKzI4OTAsMTAgQEAKIAkJ
CQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNDBFMTZG
QzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4
NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE1MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3Nl
bWJsZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVF
NyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLywKQEAg
LTMwODcsNyArMzA5MCw2IEBACiAJCQkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pT
VmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAw
NkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODZFM0M2MTcxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBp
biBIZWFkZXJzICovLApAQCAtMzEyMiwxMSArMzEyNCw5IEBACiAJCQkJQkMxOEM0MkEwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwN0QyOUUwRTg3MUU1
RTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEyMTY3
QkFCRDcwMDZENzYwQSAvKiBKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkUzQzYxQjE2
N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFyaWFibGVPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5l
LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FE
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRo
U2NvcGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQyMDQ5KQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTMtMDItMDYgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4K
KworICAgICAgICBPYmplY3RpdmUtQyBBUEk6IE5lZWQgYSB3YXkgdG8gdXNlIHRoZSBPYmplY3Rp
dmUtQyBKYXZhU2NyaXB0IEFQSSB3aXRoIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46IE5ldyBzeW1ib2xzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuaDogTmV3IGZpZWxkIHRoYXQgcmV0YWlucyBhIEpTQ29udGV4dCBpZiBvbmUgaXMgZXZl
ciB1c2VkIGJ5IGNsaWVudCBjb2RlLgorICAgICAgICAoU2NyaXB0Q29udHJvbGxlcik6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdENvbnRyb2xsZXI6OmphdmFTY3JpcHRDb250ZXh0KTogU2ltaWxhciB0byB3aW5k
b3dTY3JpcHRPYmplY3QoKSBpbiB0aGF0IGl0IGdldHMgb3IgY3JlYXRlcyBhIHJvb3QgCisgICAg
ICAgIG9iamVjdCBhbmQgdGhlbiB1c2VzIHRoZSBnbG9iYWxEYXRhKCkgZnJvbSB0aGF0IHJvb3Qg
b2JqZWN0IHRvIHN1cHBseSBhIEpTVmlydHVhbE1hY2hpbmUgd2l0aCB3aGljaCB0byBpbml0aWFs
aXplIGEgCisgICAgICAgIG5ldyBKU0NvbnRleHQuIAorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QuaDogQWRkZWQgY29udmVuaWVuY2Ug
bWV0aG9kIHRvIGNvbnZlcnQgdG8gbmV3IE9iamVjdGl2ZS1DIEpTVmFsdWUuCisgICAgICAgICog
YmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06IEFkZGVkIGEgbG90IG9mIEpTQzo6IHBy
ZWZpeGVzIHRvIEpTVmFsdWVzLCBzaW5jZSB0aGF0IHR5cGUgbm93IGNvbmZsaWN0cyB3aXRoIHRo
ZSBKU1ZhbHVlCisgICAgICAgIHR5cGUgZnJvbSB0aGUgT2JqZWN0aXZlLUMgQVBJLgorICAgICAg
ICAoLVtXZWJTY3JpcHRPYmplY3QgX2dsb2JhbENvbnRleHRSZWZdKTogSGVscGVyIG1ldGhvZCB0
byBnZXQgdGhlIEpTR2xvYmFsQ29udGV4dFJlZiBmb3IgYSBwYXJ0aWN1bGFyIFdlYlNjcmlwdE9i
amVjdC4KKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0
aEFyZ3VtZW50czpdKTogCisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0ZVdlYlNj
cmlwdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorICAg
ICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgd2ViU2NyaXB0VmFsdWVBdEluZGV4Ol0pOgorICAgICAg
ICAoK1tXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOkpTQzo6b3JpZ2lu
Um9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgSlNW
YWx1ZV0pOiBSZXR1cm5zIGEgbmV3IEpTVmFsdWUgcmVwcmVzZW50aW5nIHRoZSBpbnRlcm5hbCBK
U09iamVjdCBmb3IgdGhpcyBXZWJTY3JpcHRPYmplY3QuCisgICAgICAgICogYmluZGluZ3Mvb2Jq
Yy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg6CisKIDIwMTMtMDItMDYgIFJhZmFlbCBXZWluc3Rl
aW4gIDxyYWZhZWx3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbSFRNTFRlbXBsYXRlRWxlbWVu
dF0gTm9uIDwvdGVtcGxhdGU+IGVuZCB0YWdzIHNob3VsZCBiZSBpZ25vcmVkIGluICJ0ZW1wbGF0
ZSBjb250ZW50cyIgaW5zZXJ0aW9uIG1vZGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQ4MCw2ICs0ODAsNyBAQCBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIx
MGluaXRTY3JpCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxMWNyZWF0ZVdvcmxkRXYK
IF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjEzZXhlY3V0ZVNjcmlwdEVSS04zV1RGNlN0
cmluZ0ViCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxN2NhbkV4ZWN1dGVTY3JpcHRz
RU5TXzMzUmVhc29uRm9yQ2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzRQorX19aTjdXZWJDb3JlMTZT
Y3JpcHRDb250cm9sbGVyMTdqYXZhU2NyaXB0Q29udGV4dEV2CiBfX1pON1dlYkNvcmUxNlNjcmlw
dENvbnRyb2xsZXIxOHdpbmRvd1NjcmlwdE9iamVjdEV2CiBfX1pON1dlYkNvcmUxNlNjcmlwdENv
bnRyb2xsZXIyMGV4ZWN1dGVTY3JpcHRJbldvcmxkRVBOU18xNURPTVdyYXBwZXJXb3JsZEVSS04z
V1RGNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIyMXByb2Nlc3NpbmdV
c2VyR2VzdHVyZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5oCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogT0JKQ19DTEFT
UyBXZWJTY3JpcHRPYmplY3Q7CitPQkpDX0NMQVNTIEpTQ29udGV4dDsKICNlbmRpZgogCiBzdHJ1
Y3QgTlBPYmplY3Q7CkBAIC0xNTEsNiArMTUyLDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIFdlYlNjcmlwdE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0KCk7CisgICAgSlND
b250ZXh0ICpqYXZhU2NyaXB0Q29udGV4dCgpOwogI2VuZGlmCiAKICAgICBKU0M6OkpTT2JqZWN0
KiBqc09iamVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqKTsKQEAgLTE4Nyw2
ICsxODksNyBAQCBwcml2YXRlOgogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFJldGFp
blB0cjxXZWJTY3JpcHRPYmplY3Q+IG1fd2luZG93U2NyaXB0T2JqZWN0OworICAgIFJldGFpblB0
cjxKU0NvbnRleHQ+IG1famF2YVNjcmlwdENvbnRleHQ7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQko
cmV2aXNpb24gMTQyMDQ0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCAi
b2JqY19pbnN0YW5jZS5oIgogI2ltcG9ydCAicnVudGltZV9yb290LmgiCiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKICNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTEwOSw2ICsxMTAsMjAgQEAgV2ViU2NyaXB0T2Jq
ZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgIHJldHVybiBtX3dpbmRvd1NjcmlwdE9i
amVjdC5nZXQoKTsKIH0KIAorSlNDb250ZXh0ICpTY3JpcHRDb250cm9sbGVyOjpqYXZhU2NyaXB0
Q29udGV4dCgpCit7CisgICAgaWYgKCFjYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0
ZVNjcmlwdCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFtX2phdmFTY3JpcHRDb250
ZXh0KSB7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soSlNET01XaW5kb3dCYXNlOjpj
b21tb25KU0dsb2JhbERhdGEoKSk7CisgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Qq
IHJvb3QgPSBiaW5kaW5nUm9vdE9iamVjdCgpOworICAgICAgICBtX2phdmFTY3JpcHRDb250ZXh0
ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6dmlydHVhbE1hY2hp
bmVGcm9tQ29udGV4dEdyb3VwKHRvUmVmKCZyb290LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0
YSgpKSldOworICAgIH0KKworICAgIHJldHVybiBtX2phdmFTY3JpcHRDb250ZXh0LmdldCgpOwor
fQorCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygp
CiB7CiAgICAgaWYgKG1fd2luZG93U2NyaXB0T2JqZWN0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0LmgJKHJldmlzaW9uIDE0MjA0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDYgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpZm5k
ZWYgV2ViU2NyaXB0T2JqZWN0X2gKKyNkZWZpbmUgV2ViU2NyaXB0T2JqZWN0X2gKKwogI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0Jh
c2UuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0eS5oPgpAQCAt
MTg5LDYgKzE5Miw3IEBAIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlNjcmlwdGluZykKIAogLy8g
V2ViU2NyaXB0T2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKK0BjbGFzcyBKU1ZhbHVlOwogQGNsYXNzIFdlYlNjcmlwdE9iamVjdFByaXZh
dGU7CiBAY2xhc3MgV2ViRnJhbWU7CiAKQEAgLTI5Nyw2ICszMDEsMTQgQEAgQGludGVyZmFjZSBX
ZWJTY3JpcHRPYmplY3QgOiBOU09iamVjdAogKi8KIC0gKHZvaWQpc2V0RXhjZXB0aW9uOihOU1N0
cmluZyAqKWRlc2NyaXB0aW9uOwogCisvKiEKKyAgICBAbWV0aG9kIEpTVmFsdWUKKyAgICBAcmVz
dWx0IFRoZSBlcXVpdmFsZW50IE9iamVjdGl2ZS1DIEpTVmFsdWUgZm9yIHRoaXMgV2ViU2NyaXB0
T2JqZWN0LgorICAgIEBkaXNjdXNzaW9uIFVzZSB0aGlzIG1ldGhvZCB0byBicmlkZ2UgYmV0d2Vl
biB0aGUgV2ViU2NyaXB0T2JqZWN0IGFuZCAKKyAgICBKYXZhU2NyaXB0Q29yZSBPYmplY3RpdmUt
QyBBUElzLgorKi8KKy0gKEpTVmFsdWUgKilKU1ZhbHVlOworCiBAZW5kCiAKIApAQCAtMzE2LDMg
KzMyOCw1IEBAIEBpbnRlcmZhY2UgV2ViVW5kZWZpbmVkIDogTlNPYmplY3QgPE5TQ28KIEBlbmQK
IAogI2VuZGlmCisKKyNlbmRpZiAvLyBXZWJTY3JpcHRPYmplY3RfaApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDE0
MjA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBACiAjaW1wb3J0ICJydW50aW1lX29iamVj
dC5oIgogI2ltcG9ydCAicnVudGltZV9yb290LmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9B
UElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRJbnRlcm5hbC5oPgor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZUludGVybmFsLmg+CiAjaW1wb3J0IDxpbnRl
cnByZXRlci9DYWxsRnJhbWUuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5oPgogI2ltcG9ydCA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgpAQCAtNTMsMTAgKzU1LDIy
IEBACiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5k
aW5nczsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCit1c2luZyBKU0M6OkNhbGxEYXRhOwor
dXNpbmcgSlNDOjpDYWxsVHlwZTsKK3VzaW5nIEpTQzo6Q2FsbFR5cGVOb25lOwordXNpbmcgSlND
OjpFeGVjU3RhdGU7Cit1c2luZyBKU0M6OklkZW50aWZpZXI7Cit1c2luZyBKU0M6OkpTTG9ja0hv
bGRlcjsKK3VzaW5nIEpTQzo6SlNPYmplY3Q7Cit1c2luZyBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVm
ZmVyOwordXNpbmcgSlNDOjpQdXRQcm9wZXJ0eVNsb3Q7Cit1c2luZyBKU0M6OmpzQ2FzdDsKK3Vz
aW5nIEpTQzo6anNVbmRlZmluZWQ7Cit1c2luZyBKU0M6Om1ha2VTb3VyY2U7CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TTWFwVGFibGUqIEpTV3JhcHBlckNhY2hlOwpAQCAtMjM0
LDYgKzI0OCwxMyBAQCAtIChCT09MKV9pc1NhZmVTY3JpcHQKICAgICByZXR1cm4gQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KF9wcml2YXRlLT5vcmlnaW5Sb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCB0YXJnZXQtPmltcGwoKSk7CiB9
CiAKKy0gKEpTR2xvYmFsQ29udGV4dFJlZilfZ2xvYmFsQ29udGV4dFJlZgoreworICAgIGlmICgh
W3NlbGYgX2lzU2FmZVNjcmlwdF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHRv
R2xvYmFsUmVmKFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSk7Cit9CisKIC0gKG9uZXdheSB2b2lkKXJlbGVhc2UKIHsKICAgICAvLyBJZiB3ZSdyZSByZWxl
YXNpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LCByZW1vdmUgaWYgZnJvbSB0
aGUgbWFwLgpAQCAtMzAyLDcgKzMyMyw3IEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5T
U3RyaW5nICopbmEKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1w
XS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKG5hbWUpKSk7CisgICAgSlNDOjpK
U1ZhbHVlIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
IFN0cmluZyhuYW1lKSkpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKQpAQCAtMzE1LDcgKzMzNiw3IEBAIC0gKGlkKWNhbGxXZWJTY3Jp
cHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tl
ci5zdGFydCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpj
YWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBhcmdM
aXN0KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpj
YWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIFtzZWxmIF9pbXBdLCBhcmdM
aXN0KTsKICAgICBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRh
KCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CkBAIC0zNDEsNyArMzYyLDcgQEAgLSAoaWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5n
ICopc2NyaQogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIAogICAgIFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5z
dGFydCgpOwotICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmV2YWx1YXRlKGV4ZWMsIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUo
KSwgMCk7CisgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0
YXRlOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlNDOjpKU1Zh
bHVlKCksIDApOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKICAgICBpZCByZXN1bHRPYmogPSBbV2Vi
U2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXR1cm5WYWx1ZSBvcmlnaW5S
b290T2JqZWN0OltzZWxmIF9vcmlnaW5Sb290T2JqZWN0XSByb290T2JqZWN0OltzZWxmIF9yb290
T2JqZWN0XV07CkBAIC0zODMsNyArNDA0LDcgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5n
ICopa2V5CiAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAogICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsIFN0cmluZyhr
ZXkpKSk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4
ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKGtleSkpKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25z
b2xlKGV4ZWMpOwpAQCAtNDYyLDcgKzQ4Myw3IEBAIC0gKGlkKXdlYlNjcmlwdFZhbHVlQXRJbmRl
eDoodW5zaWduZWQpaW4KICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIAogICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2lt
cF0tPmdldChleGVjLCBpbmRleCk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9p
bXBdLT5nZXQoZXhlYywgaW5kZXgpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKQEAgLTUwOSw3ICs1MzAsNyBA
QCAtIChKU09iamVjdFJlZilKU09iamVjdAogICAgIHJldHVybiB0b1JlZihbc2VsZiBfaW1wXSk7
CiB9CiAKLSsgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZSl2YWx1ZSBvcmln
aW5Sb290T2JqZWN0OihSb290T2JqZWN0KilvcmlnaW5Sb290T2JqZWN0IHJvb3RPYmplY3Q6KFJv
b3RPYmplY3QqKXJvb3RPYmplY3QKKysgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlND
OjpKU1ZhbHVlKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KFJvb3RPYmplY3QqKW9yaWdpblJvb3RP
YmplY3Qgcm9vdE9iamVjdDooUm9vdE9iamVjdCopcm9vdE9iamVjdAogewogICAgIGlmICh2YWx1
ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7CkBAIC01NTMsNiArNTc0LDE1IEBAICsgKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZToo
SlNWYWx1ZSkKICAgICByZXR1cm4gbmlsOwogfQogCistIChKU1ZhbHVlICopSlNWYWx1ZQorewor
ICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpbc2VsZiBKU09iamVjdF0gCisgICAg
ICAgICAgICAgICAgICAgIGluQ29udGV4dDpbSlNDb250ZXh0IGNvbnRleHRGcm9tR2xvYmFsQ29u
dGV4dFJlZjpbc2VsZiBfZ2xvYmFsQ29udGV4dFJlZl1dXTsKK30KKwogQGVuZAogCiBAaW50ZXJm
YWNlIFdlYlNjcmlwdE9iamVjdCAoV2ViS2l0Q29jb2FCaW5kaW5ncykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5o
CShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNj
cmlwdE9iamVjdFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBAaW50
ZXJmYWNlIFdlYlNjcmlwdE9iamVjdCAoUHJpdmF0ZSkKIC0gKEJPT0wpX2hhc0ltcDsKIC0gKEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3QqKV9yb290T2JqZWN0OwogLSAoSlNDOjpCaW5kaW5nczo6
Um9vdE9iamVjdCopX29yaWdpblJvb3RPYmplY3Q7CistIChKU0dsb2JhbENvbnRleHRSZWYpX2ds
b2JhbENvbnRleHRSZWY7CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViU2NyaXB0T2JqZWN0IChTdGFn
ZWRGb3JQdWJsaWMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDIwNDkpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBA
QAorMjAxMy0wMi0wNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIE9iamVjdGl2ZS1DIEFQSTogTmVlZCBhIHdheSB0byB1c2UgdGhlIE9iamVjdGl2
ZS1DIEphdmFTY3JpcHQgQVBJIHdpdGggV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBbHNvIHJlcGxhY2VkIG1hbnkgaW5zdGFuY2VzIG9mIEpT
VmFsdWUgd2l0aCBKU0M6OkpTVmFsdWUgc2luY2UgaXQgbm93IGNvbmZsaWN0cyB3aXRoIHRoZSBK
U1ZhbHVlCisgICAgICAgIHR5cGUgZnJvbSB0aGUgT2JqZWN0aXZlLUMgQVBJLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06IEFkZGVkIGludm9jYXRp
b24gb2YgdGhlIHdlYlZpZXc6ZGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQ6Zm9yRnJhbWU6IGRl
bGVnYXRlIAorICAgICAgICBjYWxsYmFjayBtZXRob2QuCisgICAgICAgICogV2ViVmlldy9XZWJE
ZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oOiBBZGRlZCB0aGUgbmV3IGNhbGxiYWNrIHRv
IHRoZSBjYWNoZSBzdHJ1Y3QuCisgICAgICAgIChXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVu
dGF0aW9uQ2FjaGUpOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUuaDoKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6Zm9yY2VVc2VyR2VzdHVyZTpdKToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOndpdGhHbG9i
YWxPYmplY3Q6aW5TY3JpcHRXb3JsZDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2phdmFTY3Jp
cHRDb250ZXh0Rm9yU2NyaXB0V29ybGQ6XSk6IFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIEpTQ29u
dGV4dCBmb3IgdGhlIHNwZWNpZmllZCBXZWJTY3JpcHRXb3JsZC4KKyAgICAgICAgKC1bV2ViRnJh
bWUgamF2YVNjcmlwdENvbnRleHRdKTogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgSlNDb250ZXh0
IGZvciB0aGUgY29yZUZyYW1lLgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVMb2FkRGVsZWdh
dGUuaDogRGVjbGFyYXRpb24gb2YgdGhlIG5ldyBkZWxlZ2F0ZSBjYWxsYmFjay4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oOiAKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlw
dERlYnVnRGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBfY29udmVy
dFZhbHVlVG9PYmpjVmFsdWU6SlNDOjpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1l
IGV4Y2VwdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJT
Y3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5oOgorICAgICAgICAq
IFdlYlZpZXcvV2ViU2NyaXB0V29ybGQubW06CisgICAgICAgICgrW1dlYlNjcmlwdFdvcmxkIHNj
cmlwdFdvcmxkRm9ySmF2YVNjcmlwdENvbnRleHQ6XSk6IFJldHVybnMgdGhlIGFwcHJvcHJpYXRl
IFdlYlNjcmlwdFdvcmxkIGZvciB0aGUgc3BlY2lmaWVkIEpTQ29udGV4dC4KKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2NhY2hlRnJhbWVMb2FkRGVs
ZWdhdGVJbXBsZW1lbnRhdGlvbnNdKTogQWRkcyB0aGUgbmV3IGRlbGVnYXRlIGNhbGxiYWNrIHRv
IHRoZSBjYWNoZS4KKyAgICAgICAgKGFlRGVzY0Zyb21KU1ZhbHVlKToKKyAgICAgICAgKC1bV2Vi
VmlldyBhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpdKToKKyAgICAgICAg
KC1bV2ViVmlldyBfY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvOmZvckVsZW1lbnQ6
XSk6CisKIDIwMTMtMDItMDYgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBBZGQgYW4gRU5BQkxFX05PU05JRkYgZmVhdHVyZSBmbGFnLgpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQubW0JKHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3
IEBACiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJp
dmF0ZS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU0NvbnRleHRJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlv
bkNGLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uTWFjLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0JhY2tGb3J3YXJkQ29udHJvbGxlci5oPgpAQCAtMTE3LDYgKzExOCw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL1NjcmlwdENvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVk
QnVmZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2lk
Z2V0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViS2l0L0RP
TUhUTUxGb3JtRWxlbWVudC5oPgpAQCAtMTk1MCw3ICsxOTUyLDEwIEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2wKICAgICBGcmFtZSAqZnJhbWUgPSBjb3JlKG1fd2Vi
RnJhbWUuZ2V0KCkpOwogICAgIFNjcmlwdENvbnRyb2xsZXIgKnNjcmlwdCA9IGZyYW1lLT5zY3Jp
cHQoKTsKIAotICAgIGlmIChpbXBsZW1lbnRhdGlvbnMtPmRpZENsZWFyV2luZG93T2JqZWN0Rm9y
RnJhbWVGdW5jKSB7CisgICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ3JlYXRlSmF2YVNjcmlw
dENvbnRleHRGb3JGcmFtZUZ1bmMpIHsKKyAgICAgICAgQ2FsbEZyYW1lTG9hZERlbGVnYXRlKGlt
cGxlbWVudGF0aW9ucy0+ZGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRGb3JGcmFtZUZ1bmMsIHdl
YlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0OmZvckZy
YW1lOiksCisgICAgICAgICAgICBzY3JpcHQtPmphdmFTY3JpcHRDb250ZXh0KCksIG1fd2ViRnJh
bWUuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAoaW1wbGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRv
d09iamVjdEZvckZyYW1lRnVuYykgewogICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1w
bGVtZW50YXRpb25zLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgd2ViVmlldywg
QHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwKICAgICAg
ICAgICAgIHNjcmlwdC0+d2luZG93U2NyaXB0T2JqZWN0KCksIG1fd2ViRnJhbWUuZ2V0KCkpOwog
ICAgIH0gZWxzZSBpZiAoaW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFi
bGVGdW5jKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1w
bGVtZW50YXRpb25DYWNoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oCShyZXZpc2lvbiAxNDIwNDQp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25D
YWNoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgc3RydWN0IFdlYlJlc291
cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbgogfTsKIAogc3RydWN0IFdlYkZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSB7CisgICAgSU1QIGRpZENyZWF0ZUphdmFTY3JpcHRDb250
ZXh0Rm9yRnJhbWVGdW5jOwogICAgIElNUCBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVu
YzsKICAgICBJTVAgZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUluU2NyaXB0V29ybGRGdW5j
OwogICAgIElNUCBkaWRDbGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYzsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLmgJKHJldmlzaW9uIDE0MjA0NCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogCiBAY2xhc3MgRE9NRG9jdW1lbnQ7CiBAY2xhc3MgRE9NSFRNTEVsZW1l
bnQ7CitAY2xhc3MgSlNDb250ZXh0OwogQGNsYXNzIE5TVVJMUmVxdWVzdDsKIEBjbGFzcyBXZWJB
cmNoaXZlOwogQGNsYXNzIFdlYkRhdGFTb3VyY2U7CkBAIC0yMTMsNCArMjE0LDExIEBAIEBpbnRl
cmZhY2UgV2ViRnJhbWUgOiBOU09iamVjdAogICAgIGJyaWRnZSBiZXR3ZWVuIHRoZSBXZWJLaXQg
YW5kIEphdmFTY3JpcHRDb3JlIEFQSXMuCiAqLwogLSAoSlNHbG9iYWxDb250ZXh0UmVmKWdsb2Jh
bENvbnRleHQ7CisKKy8qIQorICAgIEBtZXRob2QgamF2YVNjcmlwdENvbnRleHQKKyAgICBAcmVz
dWx0IFRoZSBmcmFtZSdzIGdsb2JhbCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBVc2Ug
dGhpcyBtZXRob2QgdG8gCisgICAgYnJpZGdlIGJldHdlZW4gdGhlIFdlYktpdCBhbmQgT2JqZWN0
aXZlLUMgSmF2YVNjcmlwdENvcmUgQVBJLgorKi8KKy0gKEpTQ29udGV4dCAqKWphdmFTY3JpcHRD
b250ZXh0OwogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShy
ZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAjaW1wb3J0ICJXZWJTY3JpcHRXb3Js
ZEludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dElu
dGVybmFsLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvQWNjZXNzaWJpbGl0eU9iamVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9BbmltYXRpb25D
b250cm9sbGVyLmg+CkBAIC0xMDYsNyArMTA3LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAogdXNpbmcgSlNDOjpKU0dsb2JhbE9iamVjdDsKIHVzaW5nIEpTQzo6SlNMb2NrOwotdXNp
bmcgSlNDOjpKU1ZhbHVlOwogCiAvKgogSGVyZSBpcyB0aGUgY3VycmVudCBiZWhhdmlvciBtYXRy
aXggZm9yIGZvdXIgdHlwZXMgb2YgbmF2aWdhdGlvbnM6CkBAIC01ODAsNyArNTgwLDcgQEAgLSAo
TlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcgogICAgIEFTU0VSVChfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKTsKICAgICBSZXRhaW5QdHI8V2ViRnJhbWU+IHByb3Rl
Y3Qoc2VsZik7IC8vIEV4ZWN1dGluZyBhcmJpdHJhcnkgSmF2YVNjcmlwdCBjYW4gZGVzdHJveSB0
aGUgZnJhbWUuCiAgICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzdHJpbmcsIGZvcmNlVXNlckdlc3R1cmUpLmpzVmFs
dWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2Ny
aXB0KCktPmV4ZWN1dGVTY3JpcHQoc3RyaW5nLCBmb3JjZVVzZXJHZXN0dXJlKS5qc1ZhbHVlKCk7
CiAKICAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJhbWUpIC8vIEluIGNhc2UgdGhlIHNjcmlwdCBy
ZW1vdmVkIG91ciBmcmFtZSBmcm9tIHRoZSBwYWdlLgogICAgICAgICByZXR1cm4gQCIiOwpAQCAt
MTA5Myw3ICsxMDkzLDcgQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cgogICAgIEFTU0VSVChmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgUmV0YWluUHRyPFdlYkZyYW1l
PiB3ZWJGcmFtZShraXQoZnJhbWUpKTsgLy8gUnVubmluZyBhcmJpdHJhcnkgSmF2YVNjcmlwdCBj
YW4gZGVzdHJveSB0aGUgZnJhbWUuCiAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGZyYW1lLT5zY3Jp
cHQoKS0+ZXhlY3V0ZVNjcmlwdEluV29ybGQoY29yZSh3b3JsZCksIHN0cmluZywgdHJ1ZSkuanNW
YWx1ZSgpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1
dGVTY3JpcHRJbldvcmxkKGNvcmUod29ybGQpLCBzdHJpbmcsIHRydWUpLmpzVmFsdWUoKTsKIAog
ICAgIGlmICghd2ViRnJhbWUtPl9wcml2YXRlLT5jb3JlRnJhbWUpIC8vIEluIGNhc2UgdGhlIHNj
cmlwdCByZW1vdmVkIG91ciBmcmFtZSBmcm9tIHRoZSBwYWdlLgogICAgICAgICByZXR1cm4gQCIi
OwpAQCAtMTEyMCw2ICsxMTIwLDE0IEBAIC0gKEpTR2xvYmFsQ29udGV4dFJlZilfZ2xvYmFsQ29u
dGV4dEZvclMKICAgICByZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1lLT5zY3JpcHQoKS0+Z2xv
YmFsT2JqZWN0KGNvcmVXb3JsZCktPmdsb2JhbEV4ZWMoKSk7CiB9CiAKKy0gKEpTQ29udGV4dCAq
KV9qYXZhU2NyaXB0Q29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxk
Cit7CisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGdsb2JhbENvbnRleHRSZWYgPSBbc2VsZiBfZ2xv
YmFsQ29udGV4dEZvclNjcmlwdFdvcmxkOndvcmxkXTsKKyAgICBpZiAoIWdsb2JhbENvbnRleHRS
ZWYpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBbSlNDb250ZXh0IGNvbnRleHRGcm9t
R2xvYmFsQ29udGV4dFJlZjpnbG9iYWxDb250ZXh0UmVmXTsKK30KKwogLSAodm9pZClzZXRBbGxv
d3NTY3JvbGxlcnNUb092ZXJsYXBDb250ZW50OihCT09MKWZsYWcKIHsKICAgICBBU1NFUlQoW1tb
c2VsZiBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBpc0tpbmRPZkNsYXNzOltXZWJEeW5hbWljU2Ny
b2xsQmFyc1ZpZXcgY2xhc3NdXSk7CkBAIC0xNTA1LDQgKzE1MTMsMTIgQEAgLSAoSlNHbG9iYWxD
b250ZXh0UmVmKWdsb2JhbENvbnRleHQKICAgICByZXR1cm4gdG9HbG9iYWxSZWYoY29yZUZyYW1l
LT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Z2xvYmFs
RXhlYygpKTsKIH0KIAorLSAoSlNDb250ZXh0ICopamF2YVNjcmlwdENvbnRleHQKK3sKKyAgICBG
cmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBpZiAoIWNvcmVGcmFt
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+c2NyaXB0KCktPmph
dmFTY3JpcHRDb250ZXh0KCk7Cit9CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWVMb2FkRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lTG9hZERlbGVnYXRlLmgJKHJldmlzaW9uIDE0MjA0NCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVMb2FkRGVsZWdhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDQgKzE5NCwxNyBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJGcmFt
ZUxvYWREZWxlZ2F0CiAqLwogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyB3aW5k
b3dTY3JpcHRPYmplY3RBdmFpbGFibGU6KFdlYlNjcmlwdE9iamVjdCAqKXdpbmRvd1NjcmlwdE9i
amVjdCBXRUJLSVRfT0JKQ19NRVRIT0RfQU5OT1RBVElPTihBVkFJTEFCTEVfV0VCS0lUX1ZFUlNJ
T05fMV8zX0FORF9MQVRFUl9CVVRfREVQUkVDQVRFRF9JTl9XRUJLSVRfVkVSU0lPTl8zXzApOwog
CisvKiEKKyAgICBAbWV0aG9kIHdlYlZpZXc6ZGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQ6Y29u
dGV4dEZvckZyYW1lOgorICAgIEBhYnN0cmFjdCBOb3RpZmllcyB0aGUgZGVsZWdhdGUgdGhhdCBh
IG5ldyBKYXZhU2NyaXB0IGNvbnRleHQgaGFzIGJlZW4gY3JlYXRlZCBjcmVhdGVkLgorICAgIEBw
YXJhbSB3ZWJWaWV3IFRoZSBXZWJWaWV3IHNlbmRpbmcgdGhlIG1lc3NhZ2UuCisgICAgQHBhcmFt
IGNvbnRleHQgVGhlIEpTQ29udGV4dCByZXByZXNlbnRpbmcgdGhlIGZyYW1lJ3MgSmF2YVNjcmlw
dCB3aW5kb3cgb2JqZWN0LgorICAgIEBwYXJhbSBmcmFtZSBUaGUgV2ViRnJhbWUgdG8gd2hpY2gg
dGhlIGNvbnRleHQgYmVsb25ncy4KKyAgICBAZGlzY3Vzc2lvbiBJZiBhIGRlbGVnYXRlIGltcGxl
bWVudHMgd2ViVmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZTogYWxvbmcg
d2l0aCBlaXRoZXIgCisgICAgd2ViVmlldzpkaWRDbGVhcldpbmRvd09iamVjdDpmb3JGcmFtZTog
b3Igd2ViVmlldzp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGU6LCBvbmx5IAorICAgIHdlYlZp
ZXc6ZGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQ6Zm9yRnJhbWUgd2lsbCBiZSBpbnZva2VkLiBU
aGlzIGVuYWJsZXMgYSBkZWxlZ2F0ZSB0byBpbXBsZW1lbnQgCisgICAgbXVsdGlwbGUgdmVyc2lv
bnMgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9u
cyBvZiBXZWJLaXQuCisqLworLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBkaWRD
cmVhdGVKYXZhU2NyaXB0Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmb3JGcmFtZTooV2Vi
RnJhbWUgKilmcmFtZTsKKwogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiAxNDIwNDQpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw4
IEBAIEBpbnRlcmZhY2UgV2ViRnJhbWUgKFdlYlByaXZhdGUpCiAtIChOU1N0cmluZyAqKV9zdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgd2l0
aEdsb2JhbE9iamVjdDooSlNPYmplY3RSZWYpZ2xvYmFsT2JqZWN0IGluU2NyaXB0V29ybGQ6KFdl
YlNjcmlwdFdvcmxkICopd29ybGQ7CiAtIChKU0dsb2JhbENvbnRleHRSZWYpX2dsb2JhbENvbnRl
eHRGb3JTY3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZDsKIAorLSAoSlNDb250ZXh0
ICopX2phdmFTY3JpcHRDb250ZXh0Rm9yU2NyaXB0V29ybGQ6KFdlYlNjcmlwdFdvcmxkICopd29y
bGQ7CisKIC8vIFBhdXNlIGEgZ2l2ZW4gQ1NTIGFuaW1hdGlvbiBvciB0cmFuc2l0aW9uIG9uIHRo
ZSB0YXJnZXQgbm9kZSBhdCBhIHNwZWNpZmljIHRpbWUuCiAvLyBJZiB0aGUgYW5pbWF0aW9uIG9y
IHRyYW5zaXRpb24gaXMgYWxyZWFkeSBwYXVzZWQsIGl0IHdpbGwgdXBkYXRlIGl0cyBwYXVzZSB0
aW1lLgogLy8gVGhpcyBtZXRob2QgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0ZXN0
aW5nIHRoZSBDU1MgYW5pbWF0aW9uIGFuZCB0cmFuc2l0aW9uIHN5c3RlbS4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0J
KHJldmlzaW9uIDE0MjA0NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBOU1N0cmlu
ZyAqIGNvbnN0IFdlYlNjcmlwdEVycm9yTGluZU51bWJlCiAKIEBpbnRlcmZhY2UgV2ViU2NyaXB0
Q2FsbEZyYW1lIChXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW50ZXJuYWwpCiAKLS0gKGlkKV9jb252
ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZSl2YWx1ZTsKKy0gKGlkKV9jb252ZXJ0VmFsdWVU
b09iamNWYWx1ZTooSlNDOjpKU1ZhbHVlKXZhbHVlOwogCiBAZW5kCiAKQEAgLTExMyw3ICsxMTMs
NyBAQCAtICh2b2lkKV9jbGVhckRlYnVnZ2VyQ2FsbEZyYW1lCiAgICAgX3ByaXZhdGUtPmRlYnVn
Z2VyQ2FsbEZyYW1lID0gMDsKIH0KIAotLSAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihK
U1ZhbHVlKXZhbHVlCistIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1
ZSl2YWx1ZQogewogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC0yMTQs
NyArMjE0LDcgQEAgLSAoaWQpZXhjZXB0aW9uCiAgICAgaWYgKCFfcHJpdmF0ZS0+ZGVidWdnZXJD
YWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9
IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvbiA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXhjZXB0aW9uKCk7
CiAgICAgcmV0dXJuIGV4Y2VwdGlvbiA/IFtzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpl
eGNlcHRpb25dIDogbmlsOwogfQogCkBAIC0yNDEsMTUgKzI0MSwxNSBAQCAtIChpZClldmFsdWF0
ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAKICAgICAgICAgRHluYW1pY0dsb2JhbE9iamVj
dFNjb3BlIGdsb2JhbE9iamVjdFNjb3BlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9i
YWxPYmplY3QpOwogCi0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uOwotICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWUoc2NyaXB0LCBleGNlcHRpb24sIGds
b2JhbE9iamVjdCk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb247CisgICAgICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZUluR2xvYmFsQ2FsbEZyYW1lKHNjcmlwdCwgZXhj
ZXB0aW9uLCBnbG9iYWxPYmplY3QpOwogICAgICAgICBpZiAoZXhjZXB0aW9uKQogICAgICAgICAg
ICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpleGNlcHRpb25dOwogICAg
ICAgICByZXR1cm4gcmVzdWx0ID8gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJlc3Vs
dF0gOiBuaWw7ICAgICAgICAKICAgICB9CiAKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2Ny
aXB0LCBleGNlcHRpb24pOworICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb247CisgICAgSlNDOjpK
U1ZhbHVlIHJlc3VsdCA9IF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZS0+ZXZhbHVhdGUoc2Ny
aXB0LCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCiAgICAgICAgIHJldHVybiBbc2Vs
ZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6ZXhjZXB0aW9uXTsKICAgICByZXR1cm4gcmVzdWx0
ID8gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJlc3VsdF0gOiBuaWw7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5oCShyZXZpc2lvbiAxNDIw
NDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDb250
ZXh0KiBKU0dsb2JhbENvbnRleHRSZWY7CiAKK0BjbGFzcyBKU0NvbnRleHQ7CiBAY2xhc3MgV2Vi
U2NyaXB0V29ybGRQcml2YXRlOwogCiBAaW50ZXJmYWNlIFdlYlNjcmlwdFdvcmxkIDogTlNPYmpl
Y3QgewpAQCAtMzUsNiArMzYsNyBAQCBAaW50ZXJmYWNlIFdlYlNjcmlwdFdvcmxkIDogTlNPYmpl
Y3QgewogKyAoV2ViU2NyaXB0V29ybGQgKil3b3JsZDsKIAogKyAoV2ViU2NyaXB0V29ybGQgKilz
Y3JpcHRXb3JsZEZvckdsb2JhbENvbnRleHQ6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250
ZXh0OworKyAoV2ViU2NyaXB0V29ybGQgKilzY3JpcHRXb3JsZEZvckphdmFTY3JpcHRDb250ZXh0
OihKU0NvbnRleHQgKiljb250ZXh0OwogCiAtICh2b2lkKXVucmVnaXN0ZXJXb3JsZDsKIApJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxkLm1tCShyZXZpc2lv
biAxNDIwNDQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxkLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9N
QmluZGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0Nv
bnRleHRJbnRlcm5hbC5oPgogCiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTEwNiw2ICsx
MDcsMTEgQEAgKyAoV2ViU2NyaXB0V29ybGQgKilzY3JpcHRXb3JsZEZvckdsb2JhbAogICAgIHJl
dHVybiBbc2VsZiBmaW5kT3JDcmVhdGVXb3JsZDpjdXJyZW50V29ybGQodG9KUyhjb250ZXh0KSld
OwogfQogCisrIChXZWJTY3JpcHRXb3JsZCAqKXNjcmlwdFdvcmxkRm9ySmF2YVNjcmlwdENvbnRl
eHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW3NlbGYgc2NyaXB0V29ybGRG
b3JHbG9iYWxDb250ZXh0OmNvbnRleHRJbnRlcm5hbENvbnRleHQoY29udGV4dCldOworfQorCiBA
ZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJTY3JpcHRXb3JsZCAoV2ViSW50ZXJuYWwpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxNDIwNDQpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2
NTksNiArMTY1OSw3IEBAIC0gKHZvaWQpX2NhY2hlRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnQK
ICAgICBjYWNoZS0+ZGlkUHVzaFN0YXRlV2l0aGluUGFnZUZvckZyYW1lRnVuYyA9IGdldE1ldGhv
ZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkUHVzaFN0YXRlV2l0aGluUGFnZUZvckZy
YW1lOikpOwogICAgIGNhY2hlLT5kaWRSZXBsYWNlU3RhdGVXaXRoaW5QYWdlRm9yRnJhbWVGdW5j
ID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2ViVmlldzpkaWRSZXBsYWNlU3RhdGVX
aXRoaW5QYWdlRm9yRnJhbWU6KSk7CiAgICAgY2FjaGUtPmRpZFBvcFN0YXRlV2l0aGluUGFnZUZv
ckZyYW1lRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkUG9w
U3RhdGVXaXRoaW5QYWdlRm9yRnJhbWU6KSk7CisgICAgY2FjaGUtPmRpZENyZWF0ZUphdmFTY3Jp
cHRDb250ZXh0Rm9yRnJhbWVGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2Vi
VmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZTopKTsKICAgICBjYWNoZS0+
ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBz
ZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFyV2luZG93T2JqZWN0OmZvckZyYW1lOikpOwogICAgIGNh
Y2hlLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lSW5TY3JpcHRXb3JsZEZ1bmMgPSBnZXRN
ZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZENsZWFyV2luZG93T2JqZWN0Rm9y
RnJhbWU6aW5TY3JpcHRXb3JsZDopKTsKICAgICBjYWNoZS0+ZGlkQ2xlYXJJbnNwZWN0b3JXaW5k
b3dPYmplY3RGb3JGcmFtZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJW
aWV3OmRpZENsZWFySW5zcGVjdG9yV2luZG93T2JqZWN0OmZvckZyYW1lOikpOwpAQCAtNDkyNSw3
ICs0OTI2LDcgQEAgLSAoQk9PTClzaG91bGRDbG9zZQogICAgIHJldHVybiBjb3JlRnJhbWUtPmxv
YWRlcigpLT5zaG91bGRDbG9zZSgpOwogfQogCi1zdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRv
ciogYWVEZXNjRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGpzVmFsdWUpCitz
dGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkKIHsKICAgICBOU0FwcGxlRXZlbnREZXNjcmlw
dG9yKiBhZURlc2MgPSAwOwogICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKQpAQCAtNDk2Niw3
ICs0OTY3LDcgQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0ZybwogICAg
ICAgICAgICAgICAgIHJldHVybiBhZURlc2M7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpOworICAg
ICAgICBKU0M6OkpTVmFsdWUgcHJpbWl0aXZlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKTsK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlw
dG9yIG51bGxEZXNjcmlwdG9yXTsKQEAgLTQ5ODYsNyArNDk4Nyw3IEBAIC0gKE5TQXBwbGVFdmVu
dERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWwKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBpZiAo
IWNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGNvcmVGcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVl
KS5qc1ZhbHVlKCk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGNvcmVGcmFtZS0+c2NyaXB0
KCktPmV4ZWN1dGVTY3JpcHQoc2NyaXB0LCB0cnVlKS5qc1ZhbHVlKCk7CiAgICAgaWYgKCFyZXN1
bHQpIC8vIEZJWE1FOiBwYXNzIGVycm9ycwogICAgICAgICByZXR1cm4gMDsKICAgICBKU0xvY2tI
b2xkZXIgbG9jayhjb3JlRnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpLT5nbG9iYWxFeGVjKCkpOwpAQCAtNjcwOCw3ICs2NzA5LDcgQEAgLSAoSlNW
YWx1ZVJlZilfY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1ZpcwogICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLSAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVlKTsK
KyAgICBKU0M6OkpTVmFsdWUganNWYWx1ZSA9IHRvSlMoZXhlYywgdmFsdWUpOwogICAgIGlmICgh
anNWYWx1ZS5pbmhlcml0cygmSlNFbGVtZW50OjpzX2luZm8pKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgSlNFbGVtZW50KiBqc0VsZW1lbnQgPSBz
dGF0aWNfY2FzdDxKU0VsZW1lbnQqPihhc09iamVjdChqc1ZhbHVlKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189179</attachid>
            <date>2013-02-19 15:13:30 -0800</date>
            <delta_ts>2013-02-20 14:25:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106059-20130219150953.patch</filename>
            <type>text/plain</type>
            <size>115027</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzMzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxMy0wMi0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIE9iamVjdGl2ZS1DIEFQSTogTmVlZCBhIHdheSB0byB1c2UgdGhlIE9iamVjdGl2
ZS1DIEphdmFTY3JpcHQgQVBJIHdpdGggV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQSS9KU0Jhc2UuaDogUmVuYW1lZCBlbmFibGUgZmxh
ZyBmb3IgQVBJLgorICAgICAgICAqIEFQSS9KU0Jsb2NrQWRhcHRvci5oOiBVc2luZyBuZXcgZmxh
Zy4KKyAgICAgICAgKiBBUEkvSlNCbG9ja0FkYXB0b3IubW06IERpdHRvLgorICAgICAgICAqIEFQ
SS9KU0NvbnRleHQuaDogQWRkIGNvbnZlbmllbmNlIEMgQVBJIGNvbnZlcnNpb24gZnVuY3Rpb24g
Zm9yIEpTR2xvYmFsQ29udGV4dFJlZi4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lm1tOiAKKyAg
ICAgICAgKC1bSlNDb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOiBJbXBsZW1lbnRhdGlvbiBv
ZiBDIEFQSSBjb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGluaXRX
aXRoVmlydHVhbE1hY2hpbmU6XSk6IFdlIGRvbid0IHVzZSB0aGUgbV9hcGlEYXRhIGZpZWxkIGFu
eSBtb3JlLgorICAgICAgICAoLVtKU0NvbnRleHQgaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOl0p
OiBpbml0IG1ldGhvZCBmb3IgYWxsb2NhdGluZyBuZXcgSlNDb250ZXh0cyBnaXZlbiBhIEpTR2xv
YmFsQ29udGV4dFJlZi4KKyAgICAgICAgKC1bSlNDb250ZXh0IGRlYWxsb2NdKTogTm8gbW9yZSBt
X2FwaURhdGEuCisgICAgICAgICgrW0pTQ29udGV4dCBjb250ZXh0RnJvbUdsb2JhbENvbnRleHRS
ZWY6XSk6IEhlbHBlciBmdW5jdGlvbiB0byBncmFiIHRoZSBsaWdodHdlaWdodCBKU0NvbnRleHQg
d3JhcHBlciBmb3IgYSBnaXZlbgorICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgZnJvbSB0aGUg
Z2xvYmFsIHdyYXBwZXIgY2FjaGUgb3IgYWxsb2NhdGUgYSBuZXcgb25lIGlmIHRoZXJlIGlzbid0
IGFscmVhZHkgb25lLgorICAgICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOiBOZXcgZmxh
ZywgbmV3IG1ldGhvZCBkZWNsYXJhdGlvbiBmb3IgaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmLgor
ICAgICAgICAqIEFQSS9KU0V4cG9ydC5oOiBOZXcgZmxhZy4KKyAgICAgICAgKiBBUEkvSlNPYmpD
V3JhcHBlckNhY2hlLmg6IEFkZGVkLiBHbG9iYWwgd2VhayBjYWNoZSB0aGF0IG1hcHMgb3BhcXVl
IGludGVybmFsIEpTQyBvYmplY3RzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgCisgICAgICAgIGxp
Z2h0d2VpZ2h0IE9iamVjdGl2ZS1DIHdyYXBwZXJzLiBKU0NvbnRleHQsIEpTVmlydHVhbE1hY2hp
bmUsIGFuZCBKU1ZhbHVlIHVzZSB0aGlzIGNhY2hlLgorICAgICAgICAqIEFQSS9KU09iakNXcmFw
cGVyQ2FjaGUubW06IEFkZGVkLgorICAgICAgICAod3JhcHBlckNhY2hlTG9jayk6CisgICAgICAg
IChpbml0V3JhcHBlckNhY2hlKToKKyAgICAgICAgKCtbSlNPYmpDV3JhcHBlckNhY2hlIGFkZFdy
YXBwZXI6Zm9yT3BhcXVlT2JqZWN0Ol0pOgorICAgICAgICAoK1tKU09iakNXcmFwcGVyQ2FjaGUg
d3JhcHBlckZvck9wYXF1ZU9iamVjdDpdKToKKyAgICAgICAgKiBBUEkvSlNWYWx1ZS5oOiBOZXcg
ZmxhZyBhbmQgbmV3IEMgQVBJIGNvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAgICAgKiBBUEkvSlNW
YWx1ZS5tbTogV2Ugbm93IGtlZXAgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBKU0dsb2JhbENv
bnRleHRSZWYgcmF0aGVyIHRoYW4gYSBKU0NvbnRleHQgc2luY2Ugd2UgdHJlYXQKKyAgICAgICAg
dGhlIE9iamVjdGl2ZS1DIG9iamVjdHMgbGlrZSBsaWdodHdlaWdodCwgcmVwbGFjZWFibGUgd3Jh
cHBlcnMgbm93LgorICAgICAgICAoLVtKU1ZhbHVlIGNvbnRleHRdKTogVXNlIHRoZSBpbnRlcm5h
bCBjb250ZXh0RnJvbUdsb2JhbENvbnRleHQgdG8gZ2V0IGEgSlNDb250ZXh0IHRvIHJldHVybi4K
KyAgICAgICAgKC1bSlNWYWx1ZSBKU1ZhbHVlUmVmXSk6IEltcGxlbWVudGF0aW9uIG9mIHRoZSBD
IEFQSSBjb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgICgtW0pTVmFsdWUgdG9PYmplY3RdKTog
Q2hhbmdlZCB0byBjYWxsIHRoZSBnZXR0ZXIgZm9yIG1fY29udGV4dCBub3cgc2luY2UgYSBsb3Qg
b2YgdGhpbmdzIGRlcGVuZCBvbiBoYXZpbmcgYSBKU0NvbnRleHQuCisgICAgICAgICgtW0pTVmFs
dWUgdG9Cb29sXSk6IFJlbW92ZWQgdGhlIGNhbGwgdG8gY29udGV4dEludGVybmFsQ29udGV4dCBz
aW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSByYXcgSlNHbG9iYWxDb250ZXh0UmVmIG5vdy4KKyAgICAg
ICAgKC1bSlNWYWx1ZSB0b0RvdWJsZV0pOiBEaXR0by4KKyAgICAgICAgKC1bSlNWYWx1ZSB0b051
bWJlcl0pOiBEaXR0by4KKyAgICAgICAgKC1bSlNWYWx1ZSB0b1N0cmluZ10pOiBEaXR0by4KKyAg
ICAgICAgKC1bSlNWYWx1ZSB0b0RhdGVdKTogRGl0dG8uCisgICAgICAgICgtW0pTVmFsdWUgdG9B
cnJheV0pOiBEaXR0by4KKyAgICAgICAgKC1bSlNWYWx1ZSB0b0RpY3Rpb25hcnldKTogRGl0dG8u
CisgICAgICAgICgtW0pTVmFsdWUgdmFsdWVGb3JQcm9wZXJ0eTpdKTogRGl0dG8uCisgICAgICAg
ICgtW0pTVmFsdWUgc2V0VmFsdWU6Zm9yUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUg
ZGVsZXRlUHJvcGVydHk6XSk6CisgICAgICAgICgtW0pTVmFsdWUgaGFzUHJvcGVydHk6XSk6Cisg
ICAgICAgICgtW0pTVmFsdWUgZGVmaW5lUHJvcGVydHk6ZGVzY3JpcHRvcjpdKToKKyAgICAgICAg
KC1bSlNWYWx1ZSB2YWx1ZUF0SW5kZXg6XSk6CisgICAgICAgICgtW0pTVmFsdWUgc2V0VmFsdWU6
YXRJbmRleDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc1VuZGVmaW5lZF0pOgorICAgICAgICAo
LVtKU1ZhbHVlIGlzTnVsbF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzQm9vbGVhbl0pOgorICAg
ICAgICAoLVtKU1ZhbHVlIGlzTnVtYmVyXSk6CisgICAgICAgICgtW0pTVmFsdWUgaXNTdHJpbmdd
KToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc09iamVjdF0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlz
RXF1YWxUb09iamVjdDpdKToKKyAgICAgICAgKC1bSlNWYWx1ZSBpc0VxdWFsV2l0aFR5cGVDb2Vy
Y2lvblRvT2JqZWN0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIGlzSW5zdGFuY2VPZjpdKToKKyAg
ICAgICAgKC1bSlNWYWx1ZSBjYWxsV2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAgKC1bSlNWYWx1
ZSBjb25zdHJ1Y3RXaXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIGludm9rZU1l
dGhvZDp3aXRoQXJndW1lbnRzOl0pOgorICAgICAgICAoLVtKU1ZhbHVlIG9iamVjdEZvcktleWVk
U3Vic2NyaXB0Ol0pOgorICAgICAgICAoLVtKU1ZhbHVlIHNldE9iamVjdDpmb3JLZXllZFN1YnNj
cmlwdDpdKTogRGl0dG8uCisgICAgICAgICgrW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6aW5Db250
ZXh0Ol0pOiBXZSBub3cgdXNlIHRoZSBnbG9iYWwgd3JhcHBlciBjYWNoZSB0byBmZXRjaCBvdXIg
bGlnaHR3ZWlnaHQgSlNWYWx1ZSB3cmFwcGVycyBvciAKKyAgICAgICAgYWxsb2NhdGUgbmV3IG9u
ZXMgaWYgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0LiBUaGlzIHNob3VsZCBiZSBhbiBpbXByb3Zl
bWVudCBvdmVyIHRoZSBvbGQgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCwgd2hpY2ggYWx3YXlzCisg
ICAgICAgIHVuY29uZGl0aW9uYWxseSBhbGxvY2F0ZWQgYSBuZXcgSlNWYWx1ZSBldmVyeSB0aW1l
IHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQuCisgICAgICAgICgtW0pTVmFsdWUgaW5pdFdpdGhWYWx1
ZTppbkNvbnRleHQ6XSk6IE1vcmUgdHlwZSBtdW5naW5nLgorICAgICAgICAoLVtKU1ZhbHVlIGRl
YWxsb2NdKTogRGl0dG8uCisgICAgICAgICgtW0pTVmFsdWUgZGVzY3JpcHRpb25dKTogRGl0dG8u
CisgICAgICAgICogQVBJL0pTVmFsdWVJbnRlcm5hbC5oOiBOZXcgZmxhZywgaWZkZWYgZ3VhcmRz
LCBjb3JyZWN0IGluY2x1ZGVzLgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLmg6IE5l
dyBmbGFnLgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtK
U1ZpcnR1YWxNYWNoaW5lIGluaXRdKTogTm8gbW9yZSBtX2FwaURhdGEuCisgICAgICAgICgtW0pT
VmlydHVhbE1hY2hpbmUgaW5pdFdpdGhDb250ZXh0R3JvdXBSZWY6XSk6IE5ldyBpbml0IGZvciBj
cmVhdGluZyBKU1ZpcnR1YWxNYWNoaW5lIHdyYXBwZXJzIGdpdmVuIGEgSlNDb250ZXh0R3JvdXBS
ZWYuCisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgZGVhbGxvY10pOiBEaXR0by4KKyAgICAg
ICAgKHZpcnR1YWxNYWNoaW5lRnJvbUNvbnRleHRHcm91cFJlZik6IE5ldyBoZWxwZXIgZnVuY3Rp
b24gdG8gZmV0Y2ggdGhlIGxpZ2h0d2VpZ2h0IHdyYXBwZXIgZm9yIGEgSlNDb250ZXh0R3JvdXBS
ZWYgZnJvbSB0aGUgZ2xvYmFsCisgICAgICAgIHdyYXBwZXIgY2FjaGUsIG9yIHRvIGNyZWF0ZSBh
IG5ldyBvbmUgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgorICAgICAgICAqIEFQSS9KU1Zp
cnR1YWxNYWNoaW5lSW50ZXJuYWwuaDogTmV3IGZ1bmN0aW9ucywgbmV3IGZsYWcuCisgICAgICAg
ICogQVBJL0pTV3JhcHBlck1hcC5oOiBOZXcgZmxhZy4KKyAgICAgICAgKiBBUEkvSlNXcmFwcGVy
TWFwLm1tOiAKKyAgICAgICAgKC1bSlNPYmpDQ2xhc3NJbmZvIGFsbG9jYXRlQ29uc3RydWN0b3JB
bmRQcm90b3R5cGVXaXRoU3VwZXJDbGFzc0luZm86XSk6IFdlIHVzZSB0aGUgSlNPYmplY3RTZXRQ
cm90b3R5cGUgQyBBUEkgY2FsbCBiZWNhdXNlIAorICAgICAgICBzZXR0aW5nIHRoZSBfX3Byb3Rv
X18gcHJvcGVydHkgY2F1c2VzIGFsbCBzb3J0cyBvZiBiYWQgdGhpbmdzIHRvIGhhcHBlbiBiZWhp
bmQgdGhlIHNjZW5lcywgd2hpY2ggY2FuIGNhdXNlIGNyYXNoZXMgYmFzZWQgb24gCisgICAgICAg
IHdoZW4gaXQgZ2V0cyBjYWxsZWQuCisgICAgICAgICogQVBJL0phdmFTY3JpcHRDb3JlLmg6IE5l
dyBmbGFnLgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oOiBEaXR0by4KKyAg
ICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06IERpdHRvLgorICAgICAgICAoT2Jq
Q0NhbGxiYWNrRnVuY3Rpb246Ok9iakNDYWxsYmFja0Z1bmN0aW9uKTogV2UgbmV2ZXIgYWN0dWFs
bHkgc2hvdWxkIGhhdmUgcmV0YWluZWQgdGhlIHRhcmdldCBpbiB0aGUgY2FzZSB0aGF0IHdlIGhh
ZCBhIAorICAgICAgICBibG9jayBhcyBhIGNhbGxiYWNrLiBCbG9ja3MgYXJlIGluaXRpYWxseSBh
bGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBhcmUgb25seSBtb3ZlZCB0byB0aGUgaGVhcCBpZiB3
ZSBjYWxsIHRoZWlyIGNvcHkgbWV0aG9kLgorICAgICAgICBSZXRhaW5pbmcgdGhlIGJsb2NrIG9u
IHRoZSBzdGFjayB3YXMgYSBiYWQgaWRlYSBiZWNhdXNlIGlmIHRoYXQgc3RhY2sgZnJhbWUgZXZl
ciB3ZW50IGF3YXkgYW5kIHdlIGNhbGxlZCB0aGUgYmxvY2sgbGF0ZXIsIAorICAgICAgICB3ZSdk
IGNyYXNoIGFuZCBidXJuLgorICAgICAgICAoT2JqQ0NhbGxiYWNrRnVuY3Rpb246OnNldENvbnRl
eHQpOiBXZSBuZWVkIGEgbmV3IHNldHRlciBmb3Igd2hlbiB0aGUgd2VhayByZWZlcmVuY2UgdG8g
YSBKU0NvbnRleHQgaW5zaWRlIGFuIE9iakNDYWxsYmFja0Z1bmN0aW9uCisgICAgICAgIGRpc2Fw
cGVhcnMsIHdlIGNhbiBhbGxvY2F0ZSBhIG5ldyBvbmUgaW4gaXRzIHBsYWNlLgorICAgICAgICAo
T2JqQ0NhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVuY3Rpb25DYWxs
QXNGdW5jdGlvbik6IFJlc2V0IHRoZSBjYWxsYmFjaydzIGNvbnRleHQgaWYgaXQncyBldmVyIGRl
c3Ryb3llZC4KKyAgICAgICAgKG9iakNDYWxsYmFja0Z1bmN0aW9uRm9ySW52b2NhdGlvbik6IEFn
YWluLCBkb24ndCBzZXQgdGhlIF9fcHJvdG9fXyBwcm9wZXJ0eSBiZWNhdXNlIGl0IHVzZXMgYmxh
Y2sgbWFnaWMgdGhhdCBjYW4gY2F1c2UgdXMgdG8gY3Jhc2gKKyAgICAgICAgZGVwZW5kaW5nIG9u
IHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckJs
b2NrKTogSGVyZSBpcyB3aGVyZSB3ZSBjb3B5IHRoZSBibG9jayB0byB0aGUgaGVhcCB3aGVuIHdl
J3JlIGZpcnN0IGNyZWF0aW5nIHRoZSBjYWxsYmFjayBvYmplY3QgZm9yIGl0LgorICAgICAgICAq
IEFQSS90ZXN0cy90ZXN0YXBpLmM6IE5ldyBmbGFnLgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06IFdlJ3JlIGdvaW5nIHRvIGdldCByaWQgb2YgdGhlIGF1
dG9tYXRpYyBibG9jayBjb252ZXJzaW9uLCBzaW5jZSB0aGF0IGlzIGNhdXNpbmcgbGVha3MuIEkg
Y2hhbmdlZCBpdCAKKyAgICAgICAgaGVyZSBpbiB0aGlzIHRlc3QganVzdCBzbyB0aGF0IGl0IHdv
dWxkbid0IG1hc2sgYW55IG90aGVyIHBvdGVudGlhbCBsZWFrcy4KKyAgICAgICAgKC1bVGVzdE9i
amVjdCBjYWxsYmFjazpdKTogU2luY2UgSlNDb250ZXh0cyBhcmUganVzdCBsaWdodHdlaWdodCB3
cmFwcGVycyBub3csIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRvIGdldCB0aGUgc2FtZSBwb2ludGVy
IGJhY2sKKyAgICAgICAgZnJvbSB0aGUgY2FsbCB0byBbSlNWYWx1ZSBjb250ZXh0XSBhcyB0aGUg
b25lIHRoYXQgdGhlIHZhbHVlIHdhcyBjcmVhdGVkIGluLgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwOiBObyBtb3JlIG1fYXBpRGF0YS4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRh
OjpKU0dsb2JhbERhdGEpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5o
OiBEaXR0by4KKyAgICAgICAgKEpTR2xvYmFsRGF0YSk6IERpdHRvLgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwOiBEaXR0by4KKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OkpTR2xvYmFsT2JqZWN0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOiBEaXR0by4KKyAgICAgICAgKEpTR2xvYmFsT2JqZWN0KTogRGl0dG8uCisKIDIwMTMt
MDItMTggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIGluIHIxNDMzNDguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNC
YXNlLmgJKHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsOCBAQCBKU19FWFBPUlQgdm9pZCBK
U0dhcmJhZ2VDb2xsZWN0KEpTQ29udGV4CiAjZW5kaWYKIAogLyogRW5hYmxlIHRoZSBPYmplY3Rp
dmUtQyBBUEkgZm9yIHBsYXRmb3JtcyB3aXRoIGEgbW9kZXJuIHJ1bnRpbWUuICovCi0jdW5kZWYg
SlNfT0JKQ19BUElfRU5BQkxFRAotI2RlZmluZSBKU19PQkpDX0FQSV9FTkFCTEVEIChkZWZpbmVk
KF9fY2xhbmdfXykgJiYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCkgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDkwICYmICFkZWZpbmVkKF9faTM4Nl9fKSkKKyNpZiAhZGVmaW5lZChKU0NfT0JKQ19BUElf
RU5BQkxFRCkKKyNkZWZpbmUgSlNDX09CSkNfQVBJX0VOQUJMRUQgKGRlZmluZWQoX19jbGFuZ19f
KSAmJiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAgJiYg
IWRlZmluZWQoX19pMzg2X18pKQorI2VuZGlmCiAKICNlbmRpZiAvKiBKU0Jhc2VfaCAqLwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IuaAkocmV2aXNpb24g
MTQzMzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmg+CiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKIAogQGludGVyZmFjZSBKU0Jsb2NrQWRhcHRvciA6IE5TT2JqZWN0CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNCbG9ja0FkYXB0b3IubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5tbQkocmV2
aXNpb24gMTQzMzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRv
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQK
KyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0
ICJBUElTaGltcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCShy
ZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5ICsyMywxMiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAorI2lmbmRlZiBKU0NvbnRleHRfaAorI2RlZmluZSBKU0NvbnRleHRfaAorCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5oPgogCi0jaWYgSlNfT0JKQ19BUElfRU5BQkxFRAor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIEBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1Zh
bHVlOwogCkBAIC00OSw2ICs1MiwxMCBAQCBOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgTkEpCiAv
LyBFdmFsdWF0ZSBhIHN0cmluZyBvZiBKYXZhU2NyaXB0IGNvZGUuCiAtIChKU1ZhbHVlICopZXZh
bHVhdGVTY3JpcHQ6KE5TU3RyaW5nICopc2NyaXB0OwogCisvLyBSZXR1cm4gdGhlIEMgQVBJIHZl
cnNpb24gb2YgdGhpcyBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBjb252ZW5pZW5jZQor
Ly8gYXQgdGhlIGJvdW5kYXJpZXMgd2hlbiBjb252ZXJ0aW5nIGNvZGUgZnJvbSB0aGUgQyBBUEkg
dG8gdGhlIE9iamVjdGl2ZS1DIEFQSS4KKy0gKEpTR2xvYmFsQ29udGV4dFJlZilKU0dsb2JhbENv
bnRleHRSZWY7CisKIC8vIFRoaXMgbWV0aG9kIHJldHJpZXZlcyB0aGUgZ2xvYmFsIG9iamVjdCBv
ZiB0aGUgSmF2YVNjcmlwdCBleGVjdXRpb24gY29udGV4dC4KIC8vIEluc3RhbmNlcyBvZiBKU0Nv
bnRleHQgb3JpZ2luYXRpbmcgZnJvbSBXZWJLaXQgd2lsbCByZXR1cm4gYSByZWZlcmVuY2UgdG8g
dGhlCiAvLyBXaW5kb3dQcm94eSBvYmplY3QuCkBAIC0xMTQsMyArMTIxLDUgQEAgTlNfQ0xBU1Nf
QVZBSUxBQkxFKDEwXzksIE5BKQogQGVuZAogCiAjZW5kaWYKKworI2VuZGlmIC8vIEpTQ29udGV4
dF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkocmV2aXNpb24g
MTQzMzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMzLDExICszMywxMiBAQAogI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCiAj
aW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgogI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIK
KyNpbXBvcnQgIkpTT2JqQ1dyYXBwZXJDYWNoZS5oIgogI2ltcG9ydCAiT3BlcmF0aW9ucy5oIgog
I2ltcG9ydCAiU3Ryb25nSW5saW5lcy5oIgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KIAotI2lm
IEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW1wbGVt
ZW50YXRpb24gSlNDb250ZXh0IHsKICAgICBKU1ZpcnR1YWxNYWNoaW5lICptX3ZpcnR1YWxNYWNo
aW5lOwpAQCAtNDgsNiArNDksMTEgQEAKIAogQHN5bnRoZXNpemUgZXhjZXB0aW9uSGFuZGxlcjsK
IAorLSAoSlNHbG9iYWxDb250ZXh0UmVmKUpTR2xvYmFsQ29udGV4dFJlZgoreworICAgIHJldHVy
biBtX2NvbnRleHQ7Cit9CisKIC0gKGlkKWluaXQKIHsKICAgICByZXR1cm4gW3NlbGYgaW5pdFdp
dGhWaXJ0dWFsTWFjaGluZTpbW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV1dOwpAQCAtNjcsNyArNzMsNiBAQCAtIChpZClpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihK
U1ZpcnR1YWxNCiAgICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CiAg
ICAgfTsKIAotICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tX2Fw
aURhdGEgPSBzZWxmOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC0xNjcsNiArMTcyLDI1IEBA
IC0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWIKIAogQGltcGxlbWVudGF0
aW9uIEpTQ29udGV4dChJbnRlcm5hbCkKIAorLSAoaWQpaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVm
OihKU0dsb2JhbENvbnRleHRSZWYpY29udGV4dAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhjb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpOworICAgIG1fdmlydHVhbE1hY2hpbmUgPSBbdmlydHVhbE1hY2hpbmVGcm9tQ29udGV4dEdy
b3VwUmVmKHRvUmVmKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSkpIHJldGFpbl07CisgICAg
QVNTRVJUKG1fdmlydHVhbE1hY2hpbmUpOworICAgIG1fY29udGV4dCA9IEpTR2xvYmFsQ29udGV4
dFJldGFpbihjb250ZXh0KTsKKyAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3JhcHBlck1hcCBhbGxv
Y10gaW5pdFdpdGhDb250ZXh0OnNlbGZdOworCisgICAgc2VsZi5leGNlcHRpb25IYW5kbGVyID0g
XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvblZhbHVlKSB7CisgICAgICAg
IGNvbnRleHQuZXhjZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CisgICAgfTsKKworICAgIHJldHVy
biBzZWxmOworfQorCiBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChK
U0NvbnRleHQgKmNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fY29udGV4dDsKQEAg
LTE3NCw3ICsxOTgsNiBAQCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4
CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5tX2FwaURhdGEgPSAwOwogICAgIFttX3dyYXBwZXJNYXAgcmVsZWFzZV07CiAg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRleHQpOwogICAgIFttX3ZpcnR1YWxNYWNo
aW5lIHJlbGVhc2VdOwpAQCAtMjI3LDYgKzI1MCwxNiBAQCAtIChKU1ZhbHVlICopd3JhcHBlckZv
ck9iamVjdDooaWQpb2JqZWN0CiAgICAgcmV0dXJuIFttX3dyYXBwZXJNYXAgd3JhcHBlckZvck9i
amVjdDpvYmplY3RdOwogfQogCisrIChKU0NvbnRleHQgKiljb250ZXh0RnJvbUdsb2JhbENvbnRl
eHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0Cit7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW0pTT2JqQ1dyYXBwZXJDYWNoZSB3cmFwcGVyRm9yT3BhcXVlT2JqZWN0Omds
b2JhbENvbnRleHRdOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBjb250ZXh0ID0gW1tb
SlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4dF0g
YXV0b3JlbGVhc2VdOworICAgICAgICBbSlNPYmpDV3JhcHBlckNhY2hlIGFkZFdyYXBwZXI6Y29u
dGV4dCBmb3JPcGFxdWVPYmplY3Q6Z2xvYmFsQ29udGV4dF07CisgICAgfQorICAgIHJldHVybiBj
b250ZXh0OworfQorCiBAZW5kCiAKIFdlYWtDb250ZXh0UmVmOjpXZWFrQ29udGV4dFJlZihKU0Nv
bnRleHQgKmNvbnRleHQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywx
NCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorI2lmbmRlZiBKU0NvbnRleHRJbnRlcm5hbF9o
CisjZGVmaW5lIEpTQ29udGV4dEludGVybmFsX2gKKwogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogCi0jaW1wb3J0ICJKU0NvbnRleHQuaCIKKyNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTQ29udGV4dC5oPgogCiBzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKICAgICBDYWxsYmFj
a0RhdGEgKm5leHQ7CkBAIC01Niw3ICs1OSw5IEBAIHByaXZhdGU6CiAKIEBpbnRlcmZhY2UgSlND
b250ZXh0KEludGVybmFsKQogCi1KU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29u
dGV4dChKU0NvbnRleHQgKik7CistIChpZClpbml0V2l0aEdsb2JhbENvbnRleHRSZWY6KEpTR2xv
YmFsQ29udGV4dFJlZiljb250ZXh0OworCitKU19FWFBPUlRfUFJJVkFURSBKU0dsb2JhbENvbnRl
eHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChKU0NvbnRleHQgKik7CiAKIC0gKHZvaWQpbm90
aWZ5RXhjZXB0aW9uOihKU1ZhbHVlUmVmKWV4Y2VwdGlvbjsKIC0gKEpTVmFsdWUgKil2YWx1ZUZy
b21Ob3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYpZXhjZXB0aW9uOwpAQCAtNjcsOCArNzIsMTIg
QEAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHRJbnRlcm5hbENvbnRleAogCiAtIChKU1ZhbHVl
ICopd3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0OwogCisrIChKU0NvbnRleHQgKiljb250ZXh0
RnJvbUdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0Owor
CiBAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4pIEpTV3JhcHBlck1hcCAqd3JhcHBlck1hcDsK
IAogQGVuZAogCiAjZW5kaWYKKworI2VuZGlmIC8vIEpTQ29udGV4dEludGVybmFsX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNFeHBvcnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTRXhwb3J0LmgJKHJldmlzaW9uIDE0MzM4MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNFeHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
NyArMjUsNyBAQAogCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgog
Ci0jaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIC8v
IFdoZW4gYSBKYXZhU2NyaXB0IHZhbHVlIGlzIGNyZWF0ZWQgZnJvbSBhbiBpbnN0YW5jZSBvZiBh
biBPYmplY3RpdmUtQyBjbGFzcwogLy8gZm9yIHdoaWNoIG5vIGNvcHlpbmcgY29udmVyc2lvbiBp
cyBzcGVjaWZpZWQgYSBKYXZhU2NyaXB0IHdyYXBwZXIgb2JqZWN0IHdpbGwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmpDV3JhcHBlckNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iakNXcmFwcGVyQ2FjaGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmpDV3JhcHBlckNhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNPYmpD
V3JhcHBlckNhY2hlX2gKKyNkZWZpbmUgSlNPYmpDV3JhcHBlckNhY2hlX2gKKworI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK0BpbnRlcmZhY2UgSlNPYmpDV3JhcHBlckNhY2hl
IDogTlNPYmplY3QKKworKyAodm9pZClhZGRXcmFwcGVyOihpZCl3cmFwcGVyIGZvck9wYXF1ZU9i
amVjdDooY29uc3Qgdm9pZCopb2JqZWN0OworKyAoaWQpd3JhcHBlckZvck9wYXF1ZU9iamVjdDoo
Y29uc3Qgdm9pZCopb2JqZWN0OworCitAZW5kCisKKyNlbmRpZiAvLyBKU09iakNXcmFwcGVyQ2Fj
aGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iakNXcmFwcGVyQ2FjaGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iakNXcmFwcGVy
Q2FjaGUubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2Jq
Q1dyYXBwZXJDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU09iakNXcmFwcGVyQ2FjaGUuaCIK
KworI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKK3N0YXRpYyBOU01hcFRhYmxlICp3cmFwcGVyQ2FjaGUgPSAwOworCitAaW1wbGVt
ZW50YXRpb24gSlNPYmpDV3JhcHBlckNhY2hlCisKK3N0YXRpYyBNdXRleCYgd3JhcHBlckNhY2hl
TG9jaygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAg
ICByZXR1cm4gbXV0ZXg7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRXcmFwcGVyQ2FjaGUoKQorewor
ICAgIEFTU0VSVCghd3JhcHBlckNhY2hlKTsKKyAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRpb25z
IGtleU9wdGlvbnMgPSBOU1BvaW50ZXJGdW5jdGlvbnNPcGFxdWVNZW1vcnkgfCBOU1BvaW50ZXJG
dW5jdGlvbnNPcGFxdWVQZXJzb25hbGl0eTsKKyAgICBOU1BvaW50ZXJGdW5jdGlvbnNPcHRpb25z
IHZhbHVlT3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBOU1BvaW50ZXJG
dW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKKyAgICB3cmFwcGVyQ2FjaGUgPSBbW05TTWFwVGFi
bGUgYWxsb2NdIGluaXRXaXRoS2V5T3B0aW9uczprZXlPcHRpb25zIHZhbHVlT3B0aW9uczp2YWx1
ZU9wdGlvbnMgY2FwYWNpdHk6MF07Cit9CisKKysgKHZvaWQpYWRkV3JhcHBlcjooaWQpd3JhcHBl
ciBmb3JPcGFxdWVPYmplY3Q6KGNvbnN0IHZvaWQqKW9iamVjdAoreworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcih3cmFwcGVyQ2FjaGVMb2NrKCkpOworICAgIGlmICghd3JhcHBlckNhY2hlKQorICAg
ICAgICBpbml0V3JhcHBlckNhY2hlKCk7CisKKyAgICBOU01hcEluc2VydCh3cmFwcGVyQ2FjaGUs
IG9iamVjdCwgd3JhcHBlcik7Cit9CisKKysgKGlkKXdyYXBwZXJGb3JPcGFxdWVPYmplY3Q6KGNv
bnN0IHZvaWQqKW9iamVjdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcih3cmFwcGVyQ2FjaGVM
b2NrKCkpOworICAgIGlmICghd3JhcHBlckNhY2hlKQorICAgICAgICBpbml0V3JhcHBlckNhY2hl
KCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aWQ+KE5TTWFwR2V0KHdyYXBwZXJDYWNoZSwg
b2JqZWN0KSk7Cit9CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5o
CShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWZuZGVmIEpTVmFsdWVfaAorI2RlZmluZSBK
U1ZhbHVlX2gKKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIEBjbGFzcyBKU0NvbnRleHQ7
CiAKQEAgLTEwMiw2ICsxMDUsMTAgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIE5BKQogKyAo
SlNWYWx1ZSAqKXZhbHVlV2l0aE51bGxJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CiAr
IChKU1ZhbHVlICopdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250
ZXh0OwogCisvLyBSZXR1cm4gdGhlIEMgQVBJIHZlcnNpb24gb2YgdGhpcyB2YWx1ZS4gVGhpcyBm
dW5jdGlvbiBpcyBmb3IgY29udmVuaWVuY2UKKy8vIGF0IHRoZSBib3VuZGFyaWVzIHdoZW4gY29u
dmVydGluZyBjb2RlIGZyb20gdGhlIEMgQVBJIHRvIHRoZSBPYmplY3RpdmUtQyBBUEkuCistIChK
U1ZhbHVlUmVmKUpTVmFsdWVSZWY7CisKIC8vIENvbnZlcnQgdGhpcyB2YWx1ZSB0byBhIGNvcnJl
c3BvbmRpbmcgT2JqZWN0aXZlLUMgb2JqZWN0LCBhY2NvcmRpbmcgdG8gdGhlCiAvLyBjb252ZXJz
aW9uIHNwZWNpZmllZCBhYm92ZS4KIC0gKGlkKXRvT2JqZWN0OwpAQCAtMjkyLDMgKzI5OSw0IEBA
IEpTX0VYUE9SVCBleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3AKIAogI2VuZGlmCiAKKyNl
bmRpZiAvLyBKU1ZhbHVlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0J
KHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpT
V3JhcHBlck1hcC5oIgorI2ltcG9ydCAiSlNPYmpDV3JhcHBlckNhY2hlLmgiCiAjaW1wb3J0ICJP
YmpjUnVudGltZUV4dHJhcy5oIgogI2ltcG9ydCAiT3BlcmF0aW9ucy5oIgogI2ltcG9ydCAiSlND
SlNWYWx1ZS5oIgpAQCAtNDUsNyArNDYsNyBAQAogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKLSNpZiBKU19PQkpDX0FQSV9F
TkFCTEVECisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogTlNTdHJpbmcgKiBjb25zdCBKU1By
b3BlcnR5RGVzY3JpcHRvcldyaXRhYmxlS2V5ID0gQCJ3cml0YWJsZSI7CiBOU1N0cmluZyAqIGNv
bnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleSA9IEAiZW51bWVyYWJsZSI7CkBA
IC01Niw2ICs1NywxNyBAQCBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0
CiAKIEBpbXBsZW1lbnRhdGlvbiBKU1ZhbHVlIHsKICAgICBKU1ZhbHVlUmVmIG1fdmFsdWU7Cisg
ICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKK30KKworLSAoSlNDb250ZXh0ICopY29u
dGV4dAoreworICAgIHJldHVybiBbSlNDb250ZXh0IGNvbnRleHRGcm9tR2xvYmFsQ29udGV4dFJl
ZjptX2NvbnRleHRdOworfQorCistIChKU1ZhbHVlUmVmKUpTVmFsdWVSZWYKK3sKKyAgICByZXR1
cm4gbV92YWx1ZTsKIH0KIAogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE9iamVjdDooaWQpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CkBAIC0xMjUsNyArMTM3LDcgQEAgKyAoSlNW
YWx1ZSAqKXZhbHVlV2l0aFVuZGVmaW5lZEluQ29udGV4dAogCiAtIChpZCl0b09iamVjdAogewot
ICAgIHJldHVybiB2YWx1ZVRvT2JqZWN0KF9jb250ZXh0LCBtX3ZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWVUb09iamVjdChzZWxmLmNvbnRleHQsIG1fdmFsdWUpOwogfQogCiAtIChpZCl0b09iamVj
dE9mQ2xhc3M6KENsYXNzKWV4cGVjdGVkQ2xhc3MKQEAgLTEzNiwxNSArMTQ4LDE1IEBAIC0gKGlk
KXRvT2JqZWN0T2ZDbGFzczooQ2xhc3MpZXhwZWN0ZWRDbGEKIAogLSAoQk9PTCl0b0Jvb2wKIHsK
LSAgICByZXR1cm4gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250
ZXh0KSwgbV92YWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWVUb0Jvb2xlYW4obV9jb250ZXh0LCBt
X3ZhbHVlKTsKIH0KIAogLSAoZG91YmxlKXRvRG91YmxlCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNl
cHRpb24gPSAwOwotICAgIGRvdWJsZSByZXN1bHQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dElu
dGVybmFsQ29udGV4dChfY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGRvdWJs
ZSByZXN1bHQgPSBKU1ZhbHVlVG9OdW1iZXIobV9jb250ZXh0LCBtX3ZhbHVlLCAmZXhjZXB0aW9u
KTsKICAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIFtfY29udGV4dCBub3RpZnlFeGNlcHRp
b246ZXhjZXB0aW9uXTsKKyAgICAgICAgW3NlbGYuY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhj
ZXB0aW9uXTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVp
ZXRfTmFOKCk7CiAgICAgfQogCkBAIC0xNjQsNzggKzE3Niw3OCBAQCAtICh1aW50MzJfdCl0b1VJ
bnQzMgogLSAoTlNOdW1iZXIgKil0b051bWJlcgogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKLSAgICBpZCByZXN1bHQgPSB2YWx1ZVRvTnVtYmVyKGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoX2NvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBpZCByZXN1bHQgPSB2YWx1
ZVRvTnVtYmVyKG1fY29udGV4dCwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2Vw
dGlvbikKLSAgICAgICAgW19jb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAg
ICAgICBbc2VsZi5jb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIC0gKE5TU3RyaW5nICopdG9TdHJpbmcKIHsKICAgICBKU1ZhbHVlUmVm
IGV4Y2VwdGlvbiA9IDA7Ci0gICAgaWQgcmVzdWx0ID0gdmFsdWVUb1N0cmluZyhjb250ZXh0SW50
ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWQgcmVz
dWx0ID0gdmFsdWVUb1N0cmluZyhtX2NvbnRleHQsIG1fdmFsdWUsICZleGNlcHRpb24pOwogICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgIFtfY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0
aW9uXTsKKyAgICAgICAgW3NlbGYuY29udGV4dCBub3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAtIChOU0RhdGUgKil0b0RhdGUKIHsKICAgICBKU1Zh
bHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgaWQgcmVzdWx0ID0gdmFsdWVUb0RhdGUoY29udGV4
dEludGVybmFsQ29udGV4dChfY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIGlk
IHJlc3VsdCA9IHZhbHVlVG9EYXRlKG1fY29udGV4dCwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAg
ICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgW19jb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNl
cHRpb25dOworICAgICAgICBbc2VsZi5jb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC0gKE5TQXJyYXkgKil0b0FycmF5CiB7CiAgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIGlkIHJlc3VsdCA9IHZhbHVlVG9BcnJheShj
b250ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7Cisg
ICAgaWQgcmVzdWx0ID0gdmFsdWVUb0FycmF5KG1fY29udGV4dCwgbV92YWx1ZSwgJmV4Y2VwdGlv
bik7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgW19jb250ZXh0IG5vdGlmeUV4Y2VwdGlv
bjpleGNlcHRpb25dOworICAgICAgICBbc2VsZi5jb250ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNl
cHRpb25dOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC0gKE5TRGljdGlvbmFyeSAqKXRvRGlj
dGlvbmFyeQogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBpZCByZXN1bHQg
PSB2YWx1ZVRvRGljdGlvbmFyeShjb250ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92
YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgaWQgcmVzdWx0ID0gdmFsdWVUb0RpY3Rpb25hcnkobV9j
b250ZXh0LCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAg
ICBbX2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIFtzZWxmLmNv
bnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogLSAoSlNWYWx1ZSAqKXZhbHVlRm9yUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGVydHlOYW1l
CiB7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEpTT2JqZWN0UmVmIG9iamVj
dCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92
YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2Jq
ZWN0KG1fY29udGV4dCwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikK
LSAgICAgICAgcmV0dXJuIFtfY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0
aW9uXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmLmNvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0
aW9uOmV4Y2VwdGlvbl07CiAKICAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVX
aXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKXByb3BlcnR5TmFtZSk7Ci0gICAgSlNWYWx1ZVJlZiBy
ZXN1bHQgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRl
eHQpLCBvYmplY3QsIG5hbWUsICZleGNlcHRpb24pOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0g
SlNPYmplY3RHZXRQcm9wZXJ0eShtX2NvbnRleHQsIG9iamVjdCwgbmFtZSwgJmV4Y2VwdGlvbik7
CiAgICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOwogICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
IHJldHVybiBbX2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07Cisg
ICAgICAgIHJldHVybiBbc2VsZi5jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNl
cHRpb25dOwogCi0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNv
bnRleHQ6X2NvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpyZXN1
bHQgaW5Db250ZXh0OnNlbGYuY29udGV4dF07CiB9CiAKIC0gKHZvaWQpc2V0VmFsdWU6KGlkKXZh
bHVlIGZvclByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5TmFtZQogewogICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uID0gMDsKLSAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmpl
Y3QoY29udGV4dEludGVybmFsQ29udGV4dChfY29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24p
OworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChtX2NvbnRleHQsIG1f
dmFsdWUsICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgW19jb250
ZXh0IG5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICBbc2VsZi5jb250ZXh0IG5v
dGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
SlNTdHJpbmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1Jl
Zilwcm9wZXJ0eU5hbWUpOwotICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dEludGVybmFs
Q29udGV4dChfY29udGV4dCksIG9iamVjdCwgbmFtZSwgb2JqZWN0VG9WYWx1ZShfY29udGV4dCwg
dmFsdWUpLCAwLCAmZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KG1fY29udGV4
dCwgb2JqZWN0LCBuYW1lLCBvYmplY3RUb1ZhbHVlKHNlbGYuY29udGV4dCwgdmFsdWUpLCAwLCAm
ZXhjZXB0aW9uKTsKICAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CiAgICAgaWYgKGV4Y2VwdGlv
bikgewotICAgICAgICBbX2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAg
ICAgIFtzZWxmLmNvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiB9CkBAIC0yNDMsMTUgKzI1NSwxNSBAQCAtICh2b2lkKXNldFZhbHVlOihp
ZCl2YWx1ZSBmb3JQcm9wZXJ0eTooCiAtIChCT09MKWRlbGV0ZVByb3BlcnR5OihOU1N0cmluZyAq
KXByb3BlcnR5TmFtZQogewogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dEludGVybmFsQ29udGV4dChf
Y29udGV4dCksIG1fdmFsdWUsICZleGNlcHRpb24pOworICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9
IEpTVmFsdWVUb09iamVjdChtX2NvbnRleHQsIG1fdmFsdWUsICZleGNlcHRpb24pOwogICAgIGlm
IChleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBbX2NvbnRleHQgYm9vbEZyb21Ob3RpZnlFeGNl
cHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmLmNvbnRleHQgYm9vbEZyb21O
b3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKIAogICAgIEpTU3RyaW5nUmVmIG5hbWUgPSBKU1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpcHJvcGVydHlOYW1lKTsKLSAgICBC
T09MIHJlc3VsdCA9IEpTT2JqZWN0RGVsZXRlUHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4
dChfY29udGV4dCksIG9iamVjdCwgbmFtZSwgJmV4Y2VwdGlvbik7CisgICAgQk9PTCByZXN1bHQg
PSBKU09iamVjdERlbGV0ZVByb3BlcnR5KG1fY29udGV4dCwgb2JqZWN0LCBuYW1lLCAmZXhjZXB0
aW9uKTsKICAgICBKU1N0cmluZ1JlbGVhc2UobmFtZSk7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAg
ICAgICAgcmV0dXJuIFtfY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25d
OworICAgICAgICByZXR1cm4gW3NlbGYuY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25dOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI1OSwxOSArMjcxLDE5IEBA
IC0gKEJPT0wpZGVsZXRlUHJvcGVydHk6KE5TU3RyaW5nICopcHJvcGUKIC0gKEJPT0wpaGFzUHJv
cGVydHk6KE5TU3RyaW5nICopcHJvcGVydHlOYW1lCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRp
b24gPSAwOwotICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0
SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CisgICAgSlNP
YmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KG1fY29udGV4dCwgbV92YWx1ZSwgJmV4
Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIFtfY29udGV4dCBi
b29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm4gW3NlbGYu
Y29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogCiAgICAgSlNTdHJp
bmdSZWYgbmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1JlZilwcm9w
ZXJ0eU5hbWUpOwotICAgIEJPT0wgcmVzdWx0ID0gSlNPYmplY3RIYXNQcm9wZXJ0eShjb250ZXh0
SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgb2JqZWN0LCBuYW1lKTsKKyAgICBCT09MIHJlc3Vs
dCA9IEpTT2JqZWN0SGFzUHJvcGVydHkobV9jb250ZXh0LCBvYmplY3QsIG5hbWUpOwogICAgIEpT
U3RyaW5nUmVsZWFzZShuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAtICh2b2lkKWRl
ZmluZVByb3BlcnR5OihOU1N0cmluZyAqKXByb3BlcnR5IGRlc2NyaXB0b3I6KGlkKWRlc2NyaXB0
b3IKIHsKLSAgICBbW19jb250ZXh0IGdsb2JhbE9iamVjdF1bQCJPYmplY3QiXSBpbnZva2VNZXRo
b2Q6QCJkZWZpbmVQcm9wZXJ0eSIgd2l0aEFyZ3VtZW50czpAWyBzZWxmLCBwcm9wZXJ0eSwgZGVz
Y3JpcHRvciBdXTsKKyAgICBbW3NlbGYuY29udGV4dCBnbG9iYWxPYmplY3RdW0AiT2JqZWN0Il0g
aW52b2tlTWV0aG9kOkAiZGVmaW5lUHJvcGVydHkiIHdpdGhBcmd1bWVudHM6QFsgc2VsZiwgcHJv
cGVydHksIGRlc2NyaXB0b3IgXV07CiB9CiAKIC0gKEpTVmFsdWUgKil2YWx1ZUF0SW5kZXg6KE5T
VUludGVnZXIpaW5kZXgKQEAgLTI3OSwxOCArMjkxLDE4IEBAIC0gKEpTVmFsdWUgKil2YWx1ZUF0
SW5kZXg6KE5TVUludGVnZXIpaW4KICAgICAvLyBQcm9wZXJ0aWVzIHRoYXQgYXJlIGhpZ2hlciB0
aGFuIGFuIHVuc2lnbmVkIHZhbHVlIGNhbiBob2xkIGFyZSBjb252ZXJ0ZWQgdG8gYSBkb3VibGUg
dGhlbiBpbnNlcnRlZCBhcyBhIG5vcm1hbCBwcm9wZXJ0eS4KICAgICAvLyBJbmRpY2VzIHRoYXQg
YXJlIGJpZ2dlciB0aGFuIHRoZSBtYXggYWxsb3dlZCBpbmRleCBzaXplIChVSU5UX01BWCAtIDEp
IHdpbGwgYmUgaGFuZGxlZCBpbnRlcm5hbGx5IGluIGdldCgpLgogICAgIGlmIChpbmRleCAhPSAo
dW5zaWduZWQpaW5kZXgpCi0gICAgICAgIHJldHVybiBbc2VsZiB2YWx1ZUZvclByb3BlcnR5Oltb
SlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6aW5kZXggaW5Db250ZXh0Ol9jb250ZXh0XSB0b1N0cmlu
Z11dOworICAgICAgICByZXR1cm4gW3NlbGYgdmFsdWVGb3JQcm9wZXJ0eTpbW0pTVmFsdWUgdmFs
dWVXaXRoRG91YmxlOmluZGV4IGluQ29udGV4dDpzZWxmLmNvbnRleHRdIHRvU3RyaW5nXV07CiAK
ICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBtX3ZhbHVl
LCAmZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dEludGVybmFsQ29udGV4dChzZWxmLmNvbnRleHQpLCBtX3ZhbHVlLCAmZXhjZXB0aW9u
KTsKICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gW19jb250ZXh0IHZhbHVlRnJv
bU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOworICAgICAgICByZXR1cm4gW3NlbGYuY29udGV4
dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKIAotICAgIEpTVmFsdWVSZWYg
cmVzdWx0ID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dEludGVybmFsQ29udGV4
dChfY29udGV4dCksIG9iamVjdCwgKHVuc2lnbmVkKWluZGV4LCAmZXhjZXB0aW9uKTsKKyAgICBK
U1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KG1fY29udGV4dCwg
b2JqZWN0LCAodW5zaWduZWQpaW5kZXgsICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgIHJldHVybiBbX2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgICAgIHJldHVybiBbc2VsZi5jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2Vw
dGlvbjpleGNlcHRpb25dOwogCi0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJl
c3VsdCBpbkNvbnRleHQ6X2NvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhW
YWx1ZTpyZXN1bHQgaW5Db250ZXh0OnNlbGYuY29udGV4dF07CiB9CiAKIC0gKHZvaWQpc2V0VmFs
dWU6KGlkKXZhbHVlIGF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKQEAgLTI5OCw2MyArMzEwLDYz
IEBAIC0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGF0SW5kZXg6KE5TVUkKICAgICAvLyBQcm9w
ZXJ0aWVzIHRoYXQgYXJlIGhpZ2hlciB0aGFuIGFuIHVuc2lnbmVkIHZhbHVlIGNhbiBob2xkIGFy
ZSBjb252ZXJ0ZWQgdG8gYSBkb3VibGUsIHRoZW4gaW5zZXJ0ZWQgYXMgYSBub3JtYWwgcHJvcGVy
dHkuCiAgICAgLy8gSW5kaWNlcyB0aGF0IGFyZSBiaWdnZXIgdGhhbiB0aGUgbWF4IGFsbG93ZWQg
aW5kZXggc2l6ZSAoVUlOVF9NQVggLSAxKSB3aWxsIGJlIGhhbmRsZWQgaW50ZXJuYWxseSBpbiBw
dXRCeUluZGV4KCkuCiAgICAgaWYgKGluZGV4ICE9ICh1bnNpZ25lZClpbmRleCkKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHNldFZhbHVlOnZhbHVlIGZvclByb3BlcnR5OltbSlNWYWx1ZSB2YWx1ZVdp
dGhEb3VibGU6aW5kZXggaW5Db250ZXh0Ol9jb250ZXh0XSB0b1N0cmluZ11dOworICAgICAgICBy
ZXR1cm4gW3NlbGYgc2V0VmFsdWU6dmFsdWUgZm9yUHJvcGVydHk6W1tKU1ZhbHVlIHZhbHVlV2l0
aERvdWJsZTppbmRleCBpbkNvbnRleHQ6c2VsZi5jb250ZXh0XSB0b1N0cmluZ11dOwogCiAgICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFs
dWVUb09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92YWx1ZSwgJmV4
Y2VwdGlvbik7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KG1fY29u
dGV4dCwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAg
ICBbX2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIFtzZWxmLmNv
bnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBKU09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0SW50ZXJuYWxDb250ZXh0
KF9jb250ZXh0KSwgb2JqZWN0LCAodW5zaWduZWQpaW5kZXgsIG9iamVjdFRvVmFsdWUoX2NvbnRl
eHQsIHZhbHVlKSwgJmV4Y2VwdGlvbik7CisgICAgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgo
bV9jb250ZXh0LCBvYmplY3QsICh1bnNpZ25lZClpbmRleCwgb2JqZWN0VG9WYWx1ZShzZWxmLmNv
bnRleHQsIHZhbHVlKSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAg
ICBbX2NvbnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIFtzZWxmLmNv
bnRleHQgbm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAgICAgICAgIHJldHVybjsKICAgICB9
CiB9CiAKIC0gKEJPT0wpaXNVbmRlZmluZWQKIHsKLSAgICByZXR1cm4gSlNWYWx1ZUlzVW5kZWZp
bmVkKGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBtX3ZhbHVlKTsKKyAgICByZXR1
cm4gSlNWYWx1ZUlzVW5kZWZpbmVkKG1fY29udGV4dCwgbV92YWx1ZSk7CiB9CiAKIC0gKEJPT0wp
aXNOdWxsCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWVJc051bGwoY29udGV4dEludGVybmFsQ29udGV4
dChfY29udGV4dCksIG1fdmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlSXNOdWxsKG1fY29udGV4
dCwgbV92YWx1ZSk7CiB9CiAKIC0gKEJPT0wpaXNCb29sZWFuCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWVJc0Jvb2xlYW4oY29udGV4dEludGVybmFsQ29udGV4dChfY29udGV4dCksIG1fdmFsdWUpOwor
ICAgIHJldHVybiBKU1ZhbHVlSXNCb29sZWFuKG1fY29udGV4dCwgbV92YWx1ZSk7CiB9CiAKIC0g
KEJPT0wpaXNOdW1iZXIKIHsKLSAgICByZXR1cm4gSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHRJbnRl
cm5hbENvbnRleHQoX2NvbnRleHQpLCBtX3ZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZUlzTnVt
YmVyKG1fY29udGV4dCwgbV92YWx1ZSk7CiB9CiAKIC0gKEJPT0wpaXNTdHJpbmcKIHsKLSAgICBy
ZXR1cm4gSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBt
X3ZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaW5nKG1fY29udGV4dCwgbV92YWx1ZSk7
CiB9CiAKIC0gKEJPT0wpaXNPYmplY3QKIHsKLSAgICByZXR1cm4gSlNWYWx1ZUlzT2JqZWN0KGNv
bnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBtX3ZhbHVlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZUlzT2JqZWN0KG1fY29udGV4dCwgbV92YWx1ZSk7CiB9CiAKIC0gKEJPT0wpaXNFcXVhbFRv
T2JqZWN0OihpZCl2YWx1ZQogewotICAgIHJldHVybiBKU1ZhbHVlSXNTdHJpY3RFcXVhbChjb250
ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92YWx1ZSwgb2JqZWN0VG9WYWx1ZShfY29u
dGV4dCwgdmFsdWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZUlzU3RyaWN0RXF1YWwobV9jb250ZXh0
LCBtX3ZhbHVlLCBvYmplY3RUb1ZhbHVlKHNlbGYuY29udGV4dCwgdmFsdWUpKTsKIH0KIAogLSAo
Qk9PTClpc0VxdWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OihpZCl2YWx1ZQogewogICAgIEpT
VmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0VxdWFs
KGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBtX3ZhbHVlLCBvYmplY3RUb1ZhbHVl
KF9jb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAgIEJPT0wgcmVzdWx0ID0gSlNWYWx1
ZUlzRXF1YWwobV9jb250ZXh0LCBtX3ZhbHVlLCBvYmplY3RUb1ZhbHVlKHNlbGYuY29udGV4dCwg
dmFsdWUpLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4g
W19jb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJl
dHVybiBbc2VsZi5jb250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzYyLDEzICszNzQsMTMgQEAgLSAoQk9PTClpc0Vx
dWFsV2l0aFR5cGVDb2VyY2lvblRvT2JqZWN0OgogLSAoQk9PTClpc0luc3RhbmNlT2Y6KGlkKXZh
bHVlCiB7CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEpTT2JqZWN0UmVmIGNv
bnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRl
eHQpLCBvYmplY3RUb1ZhbHVlKF9jb250ZXh0LCB2YWx1ZSksICZleGNlcHRpb24pOworICAgIEpT
T2JqZWN0UmVmIGNvbnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KG1fY29udGV4dCwgb2JqZWN0
VG9WYWx1ZShzZWxmLmNvbnRleHQsIHZhbHVlKSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2Vw
dGlvbikKLSAgICAgICAgcmV0dXJuIFtfY29udGV4dCBib29sRnJvbU5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25dOworICAgICAgICByZXR1cm4gW3NlbGYuY29udGV4dCBib29sRnJvbU5vdGlmeUV4
Y2VwdGlvbjpleGNlcHRpb25dOwogCi0gICAgQk9PTCByZXN1bHQgPSBKU1ZhbHVlSXNJbnN0YW5j
ZU9mQ29uc3RydWN0b3IoY29udGV4dEludGVybmFsQ29udGV4dChfY29udGV4dCksIG1fdmFsdWUs
IGNvbnN0cnVjdG9yLCAmZXhjZXB0aW9uKTsKKyAgICBCT09MIHJlc3VsdCA9IEpTVmFsdWVJc0lu
c3RhbmNlT2ZDb25zdHJ1Y3RvcihtX2NvbnRleHQsIG1fdmFsdWUsIGNvbnN0cnVjdG9yLCAmZXhj
ZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICByZXR1cm4gW19jb250ZXh0IGJv
b2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybiBbc2VsZi5j
b250ZXh0IGJvb2xGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMzc4LDE4ICszOTAsMTggQEAgLSAoSlNWYWx1ZSAqKWNhbGxXaXRoQXJn
dW1lbnRzOihOU0FycmF5IAogICAgIE5TVUludGVnZXIgYXJndW1lbnRDb3VudCA9IFthcmd1bWVu
dEFycmF5IGNvdW50XTsKICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1thcmd1bWVudENvdW50XTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKQotICAgICAg
ICBhcmd1bWVudHNbaV0gPSBvYmplY3RUb1ZhbHVlKF9jb250ZXh0LCBbYXJndW1lbnRBcnJheSBv
YmplY3RBdEluZGV4OmldKTsKKyAgICAgICAgYXJndW1lbnRzW2ldID0gb2JqZWN0VG9WYWx1ZShz
ZWxmLmNvbnRleHQsIFthcmd1bWVudEFycmF5IG9iamVjdEF0SW5kZXg6aV0pOwogCiAgICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEpTT2JqZWN0UmVmIG9iamVjdCA9IEpTVmFsdWVU
b09iamVjdChjb250ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92YWx1ZSwgJmV4Y2Vw
dGlvbik7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KG1fY29udGV4
dCwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0
dXJuIFtfY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAg
ICAgcmV0dXJuIFtzZWxmLmNvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlv
bl07CiAKLSAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dEludGVybmFsQ29udGV4dChfY29udGV4dCksIG9iamVjdCwgMCwgYXJndW1lbnRDb3VudCwg
YXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdCA9IEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb24obV9jb250ZXh0LCBvYmplY3QsIDAsIGFyZ3VtZW50Q291bnQsIGFyZ3Vt
ZW50cywgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIFtf
Y29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsKKyAgICAgICAgcmV0
dXJuIFtzZWxmLmNvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CiAK
LSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0IGluQ29udGV4dDpfY29u
dGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJlc3VsdCBpbkNvbnRl
eHQ6c2VsZi5jb250ZXh0XTsKIH0KIAogLSAoSlNWYWx1ZSAqKWNvbnN0cnVjdFdpdGhBcmd1bWVu
dHM6KE5TQXJyYXkgKilhcmd1bWVudEFycmF5CkBAIC0zOTcsMTggKzQwOSwxOCBAQCAtIChKU1Zh
bHVlICopY29uc3RydWN0V2l0aEFyZ3VtZW50czooTlNBCiAgICAgTlNVSW50ZWdlciBhcmd1bWVu
dENvdW50ID0gW2FyZ3VtZW50QXJyYXkgY291bnRdOwogICAgIEpTVmFsdWVSZWYgYXJndW1lbnRz
W2FyZ3VtZW50Q291bnRdOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudENv
dW50OyArK2kpCi0gICAgICAgIGFyZ3VtZW50c1tpXSA9IG9iamVjdFRvVmFsdWUoX2NvbnRleHQs
IFthcmd1bWVudEFycmF5IG9iamVjdEF0SW5kZXg6aV0pOworICAgICAgICBhcmd1bWVudHNbaV0g
PSBvYmplY3RUb1ZhbHVlKHNlbGYuY29udGV4dCwgW2FyZ3VtZW50QXJyYXkgb2JqZWN0QXRJbmRl
eDppXSk7CiAKICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSlNPYmplY3RSZWYg
b2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQp
LCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJlZiBvYmplY3QgPSBKU1ZhbHVl
VG9PYmplY3QobV9jb250ZXh0LCBtX3ZhbHVlLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoZXhjZXB0
aW9uKQotICAgICAgICByZXR1cm4gW19jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpl
eGNlcHRpb25dOworICAgICAgICByZXR1cm4gW3NlbGYuY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlF
eGNlcHRpb246ZXhjZXB0aW9uXTsKIAotICAgIEpTT2JqZWN0UmVmIHJlc3VsdCA9IEpTT2JqZWN0
Q2FsbEFzQ29uc3RydWN0b3IoY29udGV4dEludGVybmFsQ29udGV4dChfY29udGV4dCksIG9iamVj
dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCAmZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFJl
ZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yKG1fY29udGV4dCwgb2JqZWN0LCBh
cmd1bWVudENvdW50LCBhcmd1bWVudHMsICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24p
Ci0gICAgICAgIHJldHVybiBbX2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2Vw
dGlvbl07CisgICAgICAgIHJldHVybiBbc2VsZi5jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2Vw
dGlvbjpleGNlcHRpb25dOwogCi0gICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnJl
c3VsdCBpbkNvbnRleHQ6X2NvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhW
YWx1ZTpyZXN1bHQgaW5Db250ZXh0OnNlbGYuY29udGV4dF07CiB9CiAKIC0gKEpTVmFsdWUgKilp
bnZva2VNZXRob2Q6KE5TU3RyaW5nICopbWV0aG9kIHdpdGhBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmd1bWVudHMKQEAgLTQxNiwyOCArNDI4LDI4IEBAIC0gKEpTVmFsdWUgKilpbnZva2VNZXRob2Q6
KE5TU3RyaW5nICopbWUKICAgICBOU1VJbnRlZ2VyIGFyZ3VtZW50Q291bnQgPSBbYXJndW1lbnRz
IGNvdW50XTsKICAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50QXJyYXlbYXJndW1lbnRDb3VudF07CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKLSAgICAgICAg
YXJndW1lbnRBcnJheVtpXSA9IG9iamVjdFRvVmFsdWUoX2NvbnRleHQsIFthcmd1bWVudHMgb2Jq
ZWN0QXRJbmRleDppXSk7CisgICAgICAgIGFyZ3VtZW50QXJyYXlbaV0gPSBvYmplY3RUb1ZhbHVl
KHNlbGYuY29udGV4dCwgW2FyZ3VtZW50cyBvYmplY3RBdEluZGV4OmldKTsKIAogICAgIEpTVmFs
dWVSZWYgZXhjZXB0aW9uID0gMDsKLSAgICBKU09iamVjdFJlZiB0aGlzT2JqZWN0ID0gSlNWYWx1
ZVRvT2JqZWN0KGNvbnRleHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBtX3ZhbHVlLCAmZXhj
ZXB0aW9uKTsKKyAgICBKU09iamVjdFJlZiB0aGlzT2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KG1f
Y29udGV4dCwgbV92YWx1ZSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgcmV0dXJuIFtfY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9uXTsK
KyAgICAgICAgcmV0dXJuIFtzZWxmLmNvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4
Y2VwdGlvbl07CiAKICAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoKENGU3RyaW5nUmVmKW1ldGhvZCk7Ci0gICAgSlNWYWx1ZVJlZiBmdW5jdGlvbiA9IEpT
T2JqZWN0R2V0UHJvcGVydHkoY29udGV4dEludGVybmFsQ29udGV4dChfY29udGV4dCksIHRoaXNP
YmplY3QsIG5hbWUsICZleGNlcHRpb24pOworICAgIEpTVmFsdWVSZWYgZnVuY3Rpb24gPSBKU09i
amVjdEdldFByb3BlcnR5KG1fY29udGV4dCwgdGhpc09iamVjdCwgbmFtZSwgJmV4Y2VwdGlvbik7
CiAgICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOwogICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
IHJldHVybiBbX2NvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07Cisg
ICAgICAgIHJldHVybiBbc2VsZi5jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNl
cHRpb25dOwogCi0gICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBmdW5jdGlvbiwgJmV4Y2VwdGlvbik7CisgICAg
SlNPYmplY3RSZWYgb2JqZWN0ID0gSlNWYWx1ZVRvT2JqZWN0KG1fY29udGV4dCwgZnVuY3Rpb24s
ICZleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBbX2NvbnRl
eHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9uOmV4Y2VwdGlvbl07CisgICAgICAgIHJldHVybiBb
c2VsZi5jb250ZXh0IHZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjpleGNlcHRpb25dOwogCi0gICAg
SlNWYWx1ZVJlZiByZXN1bHQgPSBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNvbnRleHRJbnRlcm5h
bENvbnRleHQoX2NvbnRleHQpLCBvYmplY3QsIHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFy
Z3VtZW50QXJyYXksICZleGNlcHRpb24pOworICAgIEpTVmFsdWVSZWYgcmVzdWx0ID0gSlNPYmpl
Y3RDYWxsQXNGdW5jdGlvbihtX2NvbnRleHQsIG9iamVjdCwgdGhpc09iamVjdCwgYXJndW1lbnRD
b3VudCwgYXJndW1lbnRBcnJheSwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKGV4Y2VwdGlvbikKLSAg
ICAgICAgcmV0dXJuIFtfY29udGV4dCB2YWx1ZUZyb21Ob3RpZnlFeGNlcHRpb246ZXhjZXB0aW9u
XTsKKyAgICAgICAgcmV0dXJuIFtzZWxmLmNvbnRleHQgdmFsdWVGcm9tTm90aWZ5RXhjZXB0aW9u
OmV4Y2VwdGlvbl07CiAKLSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoVmFsdWU6cmVzdWx0
IGluQ29udGV4dDpfY29udGV4dF07CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVl
OnJlc3VsdCBpbkNvbnRleHQ6c2VsZi5jb250ZXh0XTsKIH0KIAogQGVuZApAQCAtNTE3LDkgKzUy
OSw5IEBAICsgKEpTVmFsdWUgKil2YWx1ZVdpdGhTaXplOihDR1NpemUpc2l6ZSAKIC0gKEpTVmFs
dWUgKilvYmplY3RGb3JLZXllZFN1YnNjcmlwdDooaWQpa2V5CiB7CiAgICAgaWYgKCFba2V5IGlz
S2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKLSAgICAgICAga2V5ID0gW1tKU1ZhbHVl
IHZhbHVlV2l0aE9iamVjdDprZXkgaW5Db250ZXh0Ol9jb250ZXh0XSB0b1N0cmluZ107CisgICAg
ICAgIGtleSA9IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpzZWxmLmNv
bnRleHRdIHRvU3RyaW5nXTsKICAgICAgICAgaWYgKCFrZXkpCi0gICAgICAgICAgICByZXR1cm4g
W0pTVmFsdWUgdmFsdWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0Ol9jb250ZXh0XTsKKyAgICAgICAg
ICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhVbmRlZmluZWRJbkNvbnRleHQ6c2VsZi5jb250
ZXh0XTsKICAgICB9CiAKICAgICByZXR1cm4gW3NlbGYgdmFsdWVGb3JQcm9wZXJ0eTooTlNTdHJp
bmcgKilrZXldOwpAQCAtNTMzLDcgKzU0NSw3IEBAIC0gKEpTVmFsdWUgKilvYmplY3RBdEluZGV4
ZWRTdWJzY3JpcHQ6KE4KIC0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3QgZm9yS2V5ZWRTdWJz
Y3JpcHQ6KE5TT2JqZWN0IDxOU0NvcHlpbmc+ICopa2V5CiB7CiAgICAgaWYgKCFba2V5IGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pIHsKLSAgICAgICAga2V5ID0gW1tKU1ZhbHVlIHZh
bHVlV2l0aE9iamVjdDprZXkgaW5Db250ZXh0Ol9jb250ZXh0XSB0b1N0cmluZ107CisgICAgICAg
IGtleSA9IFtbSlNWYWx1ZSB2YWx1ZVdpdGhPYmplY3Q6a2V5IGluQ29udGV4dDpzZWxmLmNvbnRl
eHRdIHRvU3RyaW5nXTsKICAgICAgICAgaWYgKCFrZXkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtOTQxLDcgKzk1MywxMiBAQCBKU1ZhbHVlUmVmIHZhbHVlSW50ZXJuYWxWYWx1ZShK
U1ZhbHVlICogCiAKICsgKEpTVmFsdWUgKil2YWx1ZVdpdGhWYWx1ZTooSlNWYWx1ZVJlZil2YWx1
ZSBpbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKIHsKLSAgICByZXR1cm4gW1tbSlNWYWx1
ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNvbnRleHQ6Y29udGV4dF0gYXV0b3JlbGVh
c2VdOworICAgIEpTVmFsdWUgKndyYXBwZXIgPSBbSlNPYmpDV3JhcHBlckNhY2hlIHdyYXBwZXJG
b3JPcGFxdWVPYmplY3Q6dmFsdWVdOworICAgIGlmICghd3JhcHBlcikgeworICAgICAgICB3cmFw
cGVyID0gW1tbSlNWYWx1ZSBhbGxvY10gaW5pdFdpdGhWYWx1ZTp2YWx1ZSBpbkNvbnRleHQ6Y29u
dGV4dF0gYXV0b3JlbGVhc2VdOworICAgICAgICBbSlNPYmpDV3JhcHBlckNhY2hlIGFkZFdyYXBw
ZXI6d3JhcHBlciBmb3JPcGFxdWVPYmplY3Q6dmFsdWVdOworICAgIH0KKyAgICByZXR1cm4gd3Jh
cHBlcjsKIH0KIAogLSAoSlNWYWx1ZSAqKWluaXRXaXRoVmFsdWU6KEpTVmFsdWVSZWYpdmFsdWUg
aW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CkBAIC05NTEsOSArOTY4LDkgQEAgLSAoSlNW
YWx1ZSAqKWluaXRXaXRoVmFsdWU6KEpTVmFsdWVSZWYpdgogICAgICAgICByZXR1cm4gbmlsOwog
CiAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICBfY29udGV4dCA9IFtjb250ZXh0IHJldGFpbl07Cisg
ICAgbV9jb250ZXh0ID0gSlNHbG9iYWxDb250ZXh0UmV0YWluKGNvbnRleHRJbnRlcm5hbENvbnRl
eHQoY29udGV4dCkpOwogICAgIG1fdmFsdWUgPSB2YWx1ZTsKLSAgICBKU1ZhbHVlUHJvdGVjdChj
b250ZXh0SW50ZXJuYWxDb250ZXh0KF9jb250ZXh0KSwgbV92YWx1ZSk7CisgICAgSlNWYWx1ZVBy
b3RlY3QobV9jb250ZXh0LCBtX3ZhbHVlKTsKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtMTA3
MSwxNSArMTA4OCwxNSBAQCArIChTRUwpc2VsZWN0b3JGb3JWYWx1ZVRvU3RydWN0Oihjb25zdCBj
CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dEludGVy
bmFsQ29udGV4dChfY29udGV4dCksIG1fdmFsdWUpOwotICAgIFtfY29udGV4dCByZWxlYXNlXTsK
LSAgICBfY29udGV4dCA9IG5pbDsKKyAgICBKU1ZhbHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV92
YWx1ZSk7CisgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRleHQpOworICAgIG1fY29u
dGV4dCA9IDA7CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCiAtIChOU1N0cmluZyAqKWRlc2Ny
aXB0aW9uCiB7Ci0gICAgaWYgKGlkIHdyYXBwZWQgPSB0cnlVbndyYXBPYmpjT2JqZWN0KGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoX2NvbnRleHQpLCBtX3ZhbHVlKSkKKyAgICBpZiAoaWQgd3JhcHBl
ZCA9IHRyeVVud3JhcE9iamNPYmplY3QobV9jb250ZXh0LCBtX3ZhbHVlKSkKICAgICAgICAgcmV0
dXJuIFt3cmFwcGVkIGRlc2NyaXB0aW9uXTsKICAgICByZXR1cm4gW3NlbGYgdG9TdHJpbmddOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCShy
ZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRl
cm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTMgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKKyNpZm5kZWYgSlNWYWx1ZUludGVybmFsX2gKKyNkZWZpbmUgSlNWYWx1ZUludGVy
bmFsX2gKKwogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KLSNpbXBv
cnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4KIAotI2lm
IEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW50ZXJm
YWNlIEpTVmFsdWUoSW50ZXJuYWwpCiAKQEAgLTUyLDMgKzU1LDUgQEAgTlNJbnZvY2F0aW9uICp0
eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IoYwogTlNJbnZvY2F0aW9uICp2YWx1ZVRvVHlwZUludm9j
YXRpb25Gb3IoY29uc3QgY2hhciogZW5jb2RlZFR5cGUpOwogCiAjZW5kaWYKKworI2VuZGlmIC8v
IEpTVmFsdWVJbnRlcm5hbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmly
dHVhbE1hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMTQzMzgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcg
QEAKIAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KIAotI2lmIEpT
X09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiAvLyBBbiBpbnN0
YW5jZSBvZiBKU1ZpcnR1YWxNYWNoaW5lIHJlcHJlc2VudHMgYSBzaW5nbGUgSmF2YVNjcmlwdCAi
b2JqZWN0IHNwYWNlIgogLy8gb3Igc2V0IG9mIGV4ZWN1dGlvbiByZXNvdXJjZXMuIFRocmVhZCBz
YWZldHkgaXMgc3VwcG9ydGVkIGJ5IGxvY2tpbmcgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAxNDMzODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEwICsyNywxMSBAQAogCiAjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgogCi0j
aWYgSlNfT0JKQ19BUElfRU5BQkxFRAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKICNpbXBv
cnQgIkFQSUNhc3QuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgorI2lt
cG9ydCAiSlNPYmpDV3JhcHBlckNhY2hlLmgiCiAKIEBpbXBsZW1lbnRhdGlvbiBKU1ZpcnR1YWxN
YWNoaW5lIHsKICAgICBKU0NvbnRleHRHcm91cFJlZiBtX2dyb3VwOwpAQCAtNDMsNyArNDQsNiBA
QCAtIChpZClpbml0CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBtX2dyb3VwID0gSlNDb250
ZXh0R3JvdXBDcmVhdGUoKTsKLSAgICB0b0pTKG1fZ3JvdXApLT5tX2FwaURhdGEgPSBzZWxmOwog
ICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01MSw5ICs1MSwxOCBAQCAtIChpZClpbml0CiAKIEBp
bXBsZW1lbnRhdGlvbiBKU1ZpcnR1YWxNYWNoaW5lKEludGVybmFsKQogCistIChpZClpbml0V2l0
aENvbnRleHRHcm91cFJlZjooSlNDb250ZXh0R3JvdXBSZWYpZ3JvdXAKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IG1fZ3JvdXAgPSBKU0NvbnRleHRHcm91cFJldGFpbihncm91cCk7CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIHRvSlMobV9ncm91cCktPm1fYXBpRGF0YSA9
IDA7CiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKG1fZ3JvdXApOwogICAgIFtzdXBlciBkZWFs
bG9jXTsKIH0KQEAgLTYzLDYgKzcyLDE2IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJv
bVZpcnR1YWxNYWMKICAgICByZXR1cm4gdmlydHVhbE1hY2hpbmUtPm1fZ3JvdXA7CiB9CiAKK0pT
VmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lRnJvbUNvbnRleHRHcm91cFJlZihKU0NvbnRl
eHRHcm91cFJlZiBncm91cCkKK3sKKyAgICBKU1ZpcnR1YWxNYWNoaW5lICp2aXJ0dWFsTWFjaGlu
ZSA9IFtKU09iakNXcmFwcGVyQ2FjaGUgd3JhcHBlckZvck9wYXF1ZU9iamVjdDpncm91cF07Cisg
ICAgaWYgKCF2aXJ0dWFsTWFjaGluZSkgeworICAgICAgICB2aXJ0dWFsTWFjaGluZSA9IFtbW0pT
VmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRXaXRoQ29udGV4dEdyb3VwUmVmOmdyb3VwXSBhdXRv
cmVsZWFzZV07CisgICAgICAgIFtKU09iakNXcmFwcGVyQ2FjaGUgYWRkV3JhcHBlcjp2aXJ0dWFs
TWFjaGluZSBmb3JPcGFxdWVPYmplY3Q6Z3JvdXBdOworICAgIH0KKyAgICByZXR1cm4gdmlydHVh
bE1hY2hpbmU7Cit9CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDE0
MzM4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE1ICsyMywyMiBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAotI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZS5oIgorI2lmbmRlZiBKU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWxfaAorI2RlZmluZSBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWxfaAorCisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZpcnR1YWxNYWNoaW5lLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgogCi0jaWYgSlNfT0JKQ19BUElfRU5BQkxFRAor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIEBpbnRlcmZhY2UgSlNWaXJ0dWFsTWFjaGluZShJ
bnRlcm5hbCkKIAogSlNDb250ZXh0R3JvdXBSZWYgZ2V0R3JvdXBGcm9tVmlydHVhbE1hY2hpbmUo
SlNWaXJ0dWFsTWFjaGluZSAqKTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgSlNWaXJ0dWFsTWFjaGlu
ZSAqdmlydHVhbE1hY2hpbmVGcm9tQ29udGV4dEdyb3VwUmVmKEpTQ29udGV4dEdyb3VwUmVmKTsK
KwogQGVuZAogCiAjZW5kaWYKKworI2VuZGlmIC8vIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbF9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgJKHJldmlzaW9u
IDE0MzM4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbXBvcnQgPEpTVmFsdWVJbnRlcm5hbC5o
PgogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJM
RUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW50ZXJmYWNlIEpTV3JhcHBlck1hcCA6
IE5TT2JqZWN0CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFw
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNXcmFwcGVyTWFw
Lm1tCShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3Jh
cHBlck1hcC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKIAotI2lmIEpTX09CSkNfQVBJX0VO
QUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAj
aW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgpAQCAtMzgyLDcgKzM4Miw3IEBAICAgICAgICAg
Zm9yRWFjaFByb3RvY29sSW1wbGVtZW50aW5nUHJvdG8KICAgICAgICAgfSk7CiAKICAgICAgICAg
Ly8gU2V0IFtQcm90b3R5cGVdLgotICAgICAgICBwcm90b3R5cGVbQCJfX3Byb3RvX18iXSA9IFtK
U1ZhbHVlIHZhbHVlV2l0aFZhbHVlOnRvUmVmKHN1cGVyQ2xhc3NJbmZvLT5tX3Byb3RvdHlwZS5n
ZXQoKSkgaW5Db250ZXh0Om1fY29udGV4dF07CisgICAgICAgIEpTT2JqZWN0U2V0UHJvdG90eXBl
KGNvbnRleHRJbnRlcm5hbENvbnRleHQobV9jb250ZXh0KSwgdG9SZWYobV9wcm90b3R5cGUuZ2V0
KCkpLCB0b1JlZihzdXBlckNsYXNzSW5mby0+bV9wcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgICAg
ICBbY29uc3RydWN0b3IgcmVsZWFzZV07CiAgICAgICAgIFtwcm90b3R5cGUgcmVsZWFzZV07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0phdmFTY3JpcHRDb3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KYXZhU2NyaXB0Q29yZS5oCShyZXZpc2lv
biAxNDMzODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0phdmFTY3JpcHRDb3JlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5o
PgogCi0jaWYgZGVmaW5lZChfX09CSkNfXykgJiYgSlNfT0JKQ19BUElfRU5BQkxFRAorI2lmIGRl
ZmluZWQoX19PQkpDX18pICYmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIkpTQ29u
dGV4dC5oIgogI2ltcG9ydCAiSlNWYWx1ZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMTQzMzgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmg+CiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIAogSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JNZXRob2QoSlND
b250ZXh0ICosIENsYXNzLCBQcm90b2NvbCAqLCBCT09MIGlzSW5zdGFuY2VNZXRob2QsIFNFTCwg
Y29uc3QgY2hhciogdHlwZXMpOwogSlNPYmplY3RSZWYgb2JqQ0NhbGxiYWNrRnVuY3Rpb25Gb3JC
bG9jayhKU0NvbnRleHQgKiwgaWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9P
YmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMiArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbXBvcnQgIkph
dmFTY3JpcHRDb3JlLmgiCiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2ltcG9ydCAiQVBJU2hpbXMuaCIK
ICNpbXBvcnQgIkVycm9yLmgiCiAjaW1wb3J0ICJKU0Jsb2NrQWRhcHRvci5oIgorI2ltcG9ydCAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbXBvcnQgIkpTQ2VsbC5oIgorI2ltcG9ydCAiSlNDZWxs
SW5saW5lcy5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTV3Jh
cHBlck1hcC5oIgogI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCkBAIC00MjYsOCArNDI5LDYg
QEAgcHVibGljOgogICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKICAgICB7CiAgICAgICAgIEFT
U0VSVCh0eXBlICE9IENhbGxiYWNrSW5zdGFuY2VNZXRob2QgfHwgaW5zdGFuY2VDbGFzcyk7Ci0g
ICAgICAgIGlmIChtX3R5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCkKLSAgICAgICAgICAg
IFtbbV9pbnZvY2F0aW9uLmdldCgpIHRhcmdldF0gcmV0YWluXTsKICAgICB9CiAKICAgICB+T2Jq
Q0NhbGxiYWNrRnVuY3Rpb24oKQpAQCAtNDQ0LDYgKzQ0NSwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiAgICAgfQogCisgICAgdm9pZCBzZXRDb250ZXh0KEpT
Q29udGV4dCAqY29udGV4dCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9jb250ZXh0LmdldCgp
KTsKKyAgICAgICAgbV9jb250ZXh0LnNldChjb250ZXh0KTsKKyAgICB9CisKICAgICBpZCB3cmFw
cGVkQmxvY2soKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBDYWxsYmFja0Jsb2Nr
ID8gW21faW52b2NhdGlvbiB0YXJnZXRdIDogbmlsOwpAQCAtNDc0LDExICs0ODEsOCBAQCBzdGF0
aWMgSlNWYWx1ZVJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNhCiAgICAgT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24qIGNhbGxiYWNrID0gc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPihKU09i
amVjdEdldFByaXZhdGUoZnVuY3Rpb24pKTsKICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBjYWxs
YmFjay0+Y29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkgewotICAgICAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTg5NAotICAgICAgICAv
LyBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdGhhdCB0aGUgY29udGV4dCBiZSByZXRhaW5lZCwgaXQg
d291bGQgcHJvYmFibHkgYmUgbW9yZQotICAgICAgICAvLyBhcHByb3ByaWF0ZSB0byB1c2UgYSBu
ZXcgSlNDb250ZXh0IGluc3RhbmNlIChjcmVhdGluZyBvbmUgaWYgbmVjZXNzYXJ5KS4KLSAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKEpTQzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY2FsbGVyQ29u
dGV4dCksICJPYmplY3RpdmUtQyBjYWxsYmFjayBmdW5jdGlvbiBjb250ZXh0IHJlbGVhc2VkIikp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY2FsbGVyQ29udGV4dCk7Cisg
ICAgICAgIGNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRGcm9tR2xvYmFsQ29udGV4dFJlZjp0
b0dsb2JhbFJlZih0b0pTKGNhbGxlckNvbnRleHQpLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSldOworICAgICAgICBjYWxsYmFjay0+c2V0Q29udGV4dChjb250ZXh0KTsKICAg
ICB9CiAKICAgICBDYWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOwpAQCAtNjEwLDcgKzYxNCw3IEBA
IHN0YXRpYyBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkYKICAgICBKU09iamVjdFJl
ZiBmdW5jdGlvbk9iamVjdCA9IEpTT2JqZWN0TWFrZShjb250ZXh0SW50ZXJuYWxDb250ZXh0KGNv
bnRleHQpLCBvYmpDQ2FsbGJhY2tGdW5jdGlvbkNsYXNzKCksIG5ldyBPYmpDQ2FsbGJhY2tGdW5j
dGlvbihjb250ZXh0LCBpbnZvY2F0aW9uLCB0eXBlLCBpbnN0YW5jZUNsYXNzLCBhcmd1bWVudHMu
cmVsZWFzZSgpLCByZXN1bHQucmVsZWFzZSgpKSk7CiAgICAgSlNWYWx1ZSAqdmFsdWUgPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhWYWx1ZTpmdW5jdGlvbk9iamVjdCBpbkNvbnRleHQ6Y29udGV4dF07CiAg
ICAgdmFsdWVbQCJsZW5ndGgiXSA9IEAoYXJndW1lbnRDb3VudCk7Ci0gICAgdmFsdWVbQCJfX3By
b3RvX18iXSA9IGNvbnRleHRbQCJGdW5jdGlvbiJdW0AicHJvdG90eXBlIl07CisgICAgSlNPYmpl
Y3RTZXRQcm90b3R5cGUoY29udGV4dEludGVybmFsQ29udGV4dChjb250ZXh0KSwgZnVuY3Rpb25P
YmplY3QsIHZhbHVlSW50ZXJuYWxWYWx1ZShjb250ZXh0W0AiRnVuY3Rpb24iXVtAInByb3RvdHlw
ZSJdKSk7CiAgICAgdmFsdWVbQCJ0b1N0cmluZyJdID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCIoZnVuY3Rpb24oKXsgcmV0dXJuICciCiAgICAgICAgICJmdW5jdGlvbiA8T2JqZWN0aXZlLUM+
KCkgeyIgIlxcbiIKICAgICAgICAgIiAgICBbbmF0aXZlIGNvZGVdIiAgICAgICAgICAiXFxuIgpA
QCAtNjM0LDcgKzYzOCw3IEBAIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9yQmxv
Y2sKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY29uc3QgY2hhciogc2lnbmF0dXJlID0gX0Jsb2Nr
X3NpZ25hdHVyZSh0YXJnZXQpOwogICAgIE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiA9IFtOU0lu
dm9jYXRpb24gaW52b2NhdGlvbldpdGhNZXRob2RTaWduYXR1cmU6W05TTWV0aG9kU2lnbmF0dXJl
IHNpZ25hdHVyZVdpdGhPYmpDVHlwZXM6c2lnbmF0dXJlXV07Ci0gICAgW2ludm9jYXRpb24gc2V0
VGFyZ2V0OnRhcmdldF07CisgICAgW2ludm9jYXRpb24gc2V0VGFyZ2V0Olt0YXJnZXQgY29weV1d
OwogICAgIHJldHVybiBvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9jYXRpb24oY29udGV4dCwg
aW52b2NhdGlvbiwgQ2FsbGJhY2tCbG9jaywgbmlsLCBzaWduYXR1cmUpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkuYwkocmV2aXNpb24gMTQzMzgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdXNpbmcgc3RkOjppc25hbjsKIAogI2VuZGlmCiAKLSNp
ZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIHZvaWQgdGVz
dE9iamVjdGl2ZUNBUEkodm9pZCk7CiAjZW5kaWYKIApAQCAtMTA0Nyw3ICsxMDQ3LDcgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICA6OlNldEVycm9yTW9kZSgwKTsKICNl
bmRpZgogCi0jaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CiAgICAgdGVzdE9iamVjdGl2ZUNBUEkoKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAgZXh0ZXJuICJDIiBjb25zdCBjaGFyICogX0Jsb2NrX3NpZ25hdHVyZQog
ZXh0ZXJuIGludCBmYWlsZWQ7CiBleHRlcm4gIkMiIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkodm9p
ZCk7CiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
IAogQHByb3RvY29sIFBhcmVudE9iamVjdCA8SlNFeHBvcnQ+CiBAZW5kCkBAIC01Nyw3ICs1Nyw3
IEBAIC0gKE5TU3RyaW5nICopZ2V0U3RyaW5nOwogSlNFeHBvcnRBcyh0ZXN0QXJndW1lbnRUeXBl
cywKIC0gKE5TU3RyaW5nICopdGVzdEFyZ3VtZW50VHlwZXNXaXRoSW50OihpbnQpaSBkb3VibGU6
KGRvdWJsZSlkIGJvb2xlYW46KEJPT0wpYiBzdHJpbmc6KE5TU3RyaW5nICopcyBudW1iZXI6KE5T
TnVtYmVyICopbiBhcnJheTooTlNBcnJheSAqKWEgZGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5ICop
bwogKTsKLS0gKHZvaWQpY2FsbGJhY2s6KHZvaWQoXikoaW50KSlibG9jazsKKy0gKHZvaWQpY2Fs
bGJhY2s6KEpTVmFsdWUgKilmdW5jdGlvbjsKIEBlbmQKIAogQGludGVyZmFjZSBUZXN0T2JqZWN0
IDogUGFyZW50T2JqZWN0IDxUZXN0T2JqZWN0PgpAQCAtODUsOSArODUsOSBAQCAtIChOU1N0cmlu
ZyAqKXRlc3RBcmd1bWVudFR5cGVzV2l0aEludDooCiB7CiAgICAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJWQsJWcsJWQsJUAsJWQsJUAsJUAiLCBpLCBkLCBiPT1ZRVM/dHJ1
ZTpmYWxzZSxzLFtuIGludFZhbHVlXSxhWzFdLG9bQCJ4Il1dOwogfQotLSAodm9pZCljYWxsYmFj
azoodm9pZCheKShpbnQpKWJsb2NrCistICh2b2lkKWNhbGxiYWNrOihKU1ZhbHVlICopZnVuY3Rp
b24KIHsKLSAgICBibG9jayg0Mik7CisgICAgW2Z1bmN0aW9uIGNhbGxXaXRoQXJndW1lbnRzOltO
U0FycmF5IGFycmF5V2l0aE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDo0Ml1dXTsKIH0K
IEBlbmQKIApAQCAtNDgyLDEwICs0ODIsOCBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0MSA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKICAg
ICAgICAgSlNDb250ZXh0ICpjb250ZXh0MiA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZp
cnR1YWxNYWNoaW5lOmNvbnRleHQxLnZpcnR1YWxNYWNoaW5lXTsKICAgICAgICAgSlNWYWx1ZSAq
dmFsdWUgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhEb3VibGU6NDIgaW5Db250ZXh0OmNvbnRleHQyXTsK
LSAgICAgICAgY2hlY2tSZXN1bHQoQCJ2YWx1ZS5jb250ZXh0ID09IGNvbnRleHQyIiwgdmFsdWUu
Y29udGV4dCA9PSBjb250ZXh0Mik7CiAgICAgICAgIGNvbnRleHQxW0AicGFzc1ZhbHVlQmV0d2Vl
bkNvbnRleHRzIl0gPSB2YWx1ZTsKICAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQx
IGV2YWx1YXRlU2NyaXB0OkAicGFzc1ZhbHVlQmV0d2VlbkNvbnRleHRzIl07Ci0gICAgICAgIGNo
ZWNrUmVzdWx0KEAicmVzdWx0LmNvbnRleHQgPT0gY29udGV4dDEiLCByZXN1bHQuY29udGV4dCA9
PSBjb250ZXh0MSk7CiAgICAgICAgIGNoZWNrUmVzdWx0KEAiW3ZhbHVlIGlzRXF1YWxUb09iamVj
dDpyZXN1bHRdIiwgW3ZhbHVlIGlzRXF1YWxUb09iamVjdDpyZXN1bHRdKTsKICAgICB9CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQzMzgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTU4NywxMyArNTg3LDEzIEBACiAJCTg2RTNDNjE0MTY3QkFC
RDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZFM0M2MEExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk4NkUzQzYxNTE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpT
VmlydHVhbE1hY2hpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CiAJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwODE2N0JBQjg3
MDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tICovOyB9OwotCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2
MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRl
cm5hbC5oICovOyB9OworCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RTNDNjA5MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RTNDNjE4MTY3QkFCRUUw
MDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwQjE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFw
Lm1tICovOyB9OwogCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwQzE2
N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggKi87IH07CiAJCTg2RTNDNjFBMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZFM0M2MEQxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gKi87
IH07Ci0JCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBFMTY3QkFC
ODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKKwkJODZFM0M2MUIxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWVJ
bnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MTAxNjdCQUI4
NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi87IH07Ci0JCTg2RTNDNjFEMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjExMTY3QkFCODcwMDZENzYwQSAv
KiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLzsgfTsKKwkJODZFM0M2MUQxNjdCQUJFRTAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1
aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RTg1NTM4MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCAqLzsgfTsKIAkJODZF
QkYyRkYxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVCRjJGOTE1NjBGMDM2MDA4RTky
MjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJODZFQkYzMDAxNTYwRjA2QTAwOEU5
MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODZFQkYyRkExNTYwRjAzNjAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rv
ci5oICovOyB9OwpAQCAtODMwLDYgKzgzMCw4IEBACiAJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3
MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFs
U3dlZXBlci5jcHAgKi87IH07CiAJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1l
bnRhbFN3ZWVwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyNUY4QkNDMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkE3RjY4ODE2
MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQTdGNjg3MTYwNDMyRDQwMEY3NkI5OCAv
KiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUMyQUJGNjVCMTZDRUVFNTAwMEQwRjY5MSAvKiBKU09iakNXcmFw
cGVyQ2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkFCRjY1OTE2Q0VFRTUwMDBEMEY2OTEgLyogSlNPYmpDV3JhcHBlckNhY2hlLm1tICovOyB9
OworCQlDMkFCRjY1QzE2Q0VFRTUwMDBEMEY2OTEgLyogSlNPYmpDV3JhcHBlckNhY2hlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkFCRjY1QTE2Q0VF
RTUwMDBEMEY2OTEgLyogSlNPYmpDV3JhcHBlckNhY2hlLmggKi87IH07CiAJCUMyQjkxNkMyMTRE
QTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQjkxNkMxMTREQTAxNEUwMENCQUM4NiAvKiBNYXJr
ZWRBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlDMkI5MTZDNTE0REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyQjkxNkM0MTRE
QTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwICovOyB9OwogCQlDMkM4RDAyRDE0
QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkM4RDAyQjE0QTNDNkIyMDA1NzhFNjUgLyog
Q29waWVkU3BhY2VJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE3MjIsNiArMTcyNCw4IEBACiAJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0
NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5jcmVtZW50YWxTd2VlcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmNyZW1lbnRhbFN3ZWVwZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8q
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
QUJGNjU5MTZDRUVFNTAwMEQwRjY5MSAvKiBKU09iakNXcmFwcGVyQ2FjaGUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU09iakNXcmFwcGVyQ2FjaGUubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQUJGNjVBMTZDRUVFNTAwMEQwRjY5MSAvKiBK
U09iakNXcmFwcGVyQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNP
YmpDV3JhcHBlckNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQjkxNkMx
MTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyQjkxNkM0MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkQWxsb2NhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDOEQwMkIxNEEzQzZCMjAwNTc4RTY1IC8q
IENvcGllZFNwYWNlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3BpZWRTcGFjZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDIs
NiArMjIwNiw4IEBACiAJCQkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmNwcCAqLywKIAkJCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJp
bmcuaCAqLywKIAkJCQk1REUzRDBGNDBERDhEREZCMDA0Njg3MTQgLyogV2ViS2l0QXZhaWxhYmls
aXR5LmggKi8sCisJCQkJQzJBQkY2NTkxNkNFRUU1MDAwRDBGNjkxIC8qIEpTT2JqQ1dyYXBwZXJD
YWNoZS5tbSAqLywKKwkJCQlDMkFCRjY1QTE2Q0VFRTUwMDBEMEY2OTEgLyogSlNPYmpDV3JhcHBl
ckNhY2hlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFQSTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0yOTI1LDcgKzI5MzEsMTAgQEAKIAkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3
QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQw
NzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMz
RTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90
b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEg
LyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTg2RTNDNjFCMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk2ODhDQjE1MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3NlbWJsZXJCdWZmZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRo
Q29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjIsNyArMzEzMSw2IEBACiAJCQkJ
ODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYz
QzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDEx
NDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLApAQCAtMzE1Nywx
MSArMzE2NSw5IEBACiAJCQkJQkMxOEM0MkEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjUwN0QyOUUwRTg3MUU1RTAwRDdEODk2IC8qIEpTVHlwZUluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEyMTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZhbHVl
LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE1MTY3
QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywKLQkJCQk4
NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0
TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMzE2OSw2ICszMTc1LDcgQEAKIAkJCQlCQzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNX
cmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2
M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNG
RDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzJBQkY2NUMxNkNFRUU1MDAwRDBGNjkxIC8qIEpTT2JqQ1dyYXBwZXJDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTYwMDk3QTYwRUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVsU2NvcGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMzgyMiw2ICszODI5LDcgQEAKIAkJCQkwRjc2NkQyRjE1QThE
Q0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyMjM5RDFBMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDMjExMjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUMyQUJGNjVCMTZDRUVFNTAwMEQwRjY5MSAvKiBKU09iakNX
cmFwcGVyQ2FjaGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYz
QzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VD
MEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUz
MTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJl
dmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNiBAQCBKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBtX3RpbWVvdXRDb3VudCg1MTIpCiAj
ZW5kaWYKICAgICAsIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zdCgwKQotICAgICwgbV9h
cGlEYXRhKDApCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAsIG1fY2FuVXNlQXNzZW1ibGVy
KGVuYWJsZUFzc2VtYmxlcihleGVjdXRhYmxlQWxsb2NhdG9yKSkKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDE0
MzM4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NzksOCArNDc5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCi0gICAgICAgIHZv
aWQgKm1fYXBpRGF0YTsKLQogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTQzMzgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsNyArMTE2LDYgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0
KEpTR2xvYmFsRAogICAgICwgbV93ZWFrUmFuZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNl
ZWQoKSA/IE9wdGlvbnM6OmZvcmNlZFdlYWtSYW5kb21TZWVkKCkgOiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpICsgMS4wKSkpCiAgICAgLCBtX2V2YWxFbmFibGVkKHRydWUpCiAgICAgLCBtX2dsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUgOiAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKLSAgICAsIG1fYXBpRGF0YSgw
KQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw4ICsxOTYsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNEZWJ1Z2dlcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdn
ZXI7IH0KICAgICBib29sIGhhc1Byb2ZpbGVyKCkgY29uc3QgeyByZXR1cm4gZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+c3VwcG9ydHNQcm9maWxpbmcodGhpcyk7IH0KIAotICAgIHZvaWQqIG1f
YXBpRGF0YTsKLQogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpT
R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKiA9IDApOwogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzMzg5KQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMi0x
OSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIE9i
amVjdGl2ZS1DIEFQSTogTmVlZCBhIHdheSB0byB1c2UgdGhlIE9iamVjdGl2ZS1DIEphdmFTY3Jp
cHQgQVBJIHdpdGggV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDYwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHd0Zi9GZWF0dXJlRGVmaW5lcy5oOiBBZGRlZCBlbmFibGUgZmxhZyBmb3Ig
SlNDIE9iamVjdGl2ZS1DIEFQSSBzbyBpdCBjYW4gYmUgdXNlZCBpbgorICAgICAgICBleHBvcnQg
ZmlsZXMuCisKIDIwMTMtMDItMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFN0eWxlIHR3ZWFrcyB0byBTdHJpbmdIYXNoZXIuaApJbmRleDogU291cmNlL1dURi93
dGYvRmVhdHVyZURlZmluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GZWF0dXJl
RGVmaW5lcy5oCShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVm
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjYsNiArNTY2LDExIEBACiAjZGVmaW5lIEVOQUJM
RV9KQVZBU0NSSVBUX0kxOE5fQVBJIDAKICNlbmRpZgogCisvLyBXZSB1c2UgYSBzbGlnaHRseSBk
aWZmZXJlbnQgZm9ybWF0IGhlcmUgYmVjYXVzZSB3ZSB1c2UgdGhpcyBtYWNybyBpbiBleHRlcm5h
bGx5IHZpc2libGUgaGVhZGVycy4KKyNpZiAhZGVmaW5lZChKU0NfT0JKQ19BUElfRU5BQkxFRCkK
KyNkZWZpbmUgSlNDX09CSkNfQVBJX0VOQUJMRUQgKGRlZmluZWQoX19jbGFuZ19fKSAmJiBkZWZp
bmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAgJiYgIWRlZmluZWQo
X19pMzg2X18pKQorI2VuZGlmCisKICNpZiAhZGVmaW5lZChFTkFCTEVfTEVHQUNZX0NTU19WRU5E
T1JfUFJFRklYRVMpCiAjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUyAw
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzM4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEzLTAyLTE5
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgT2Jq
ZWN0aXZlLUMgQVBJOiBOZWVkIGEgd2F5IHRvIHVzZSB0aGUgT2JqZWN0aXZlLUMgSmF2YVNjcmlw
dCBBUEkgd2l0aCBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwNjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3cpOiBTaW5jZSB3ZSdyZSBiYXNp
Y2FsbHkgYWJhbmRvbmluZyBhIEpTRE9NV2luZG93IGhlcmUsIHdlIGNhbGwKKyAgICAgICAgZ2Fy
YmFnZUNvbGxlY3RTb29uKCkuCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVs
bC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDogTmV3IGZ1bmN0
aW9uIHRvIGdldCB0aGUgSlNDb250ZXh0IGZvciB0aGUgZ2xvYmFsIG9iamVjdCBvZiB0aGUgY3Vy
cmVudCBtYWluIHdvcmxkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJN
YWMubW06IAorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6amF2YVNjcmlwdENv
bnRleHQpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5o
OiBBZGRlZCBpZmRlZiBndWFyZHMuIEFsc28gbmV3IGNvbnZlbmllbmNlIGNvbnZlcnNpb24gZnVu
Y3Rpb24gZm9yIHRoZSBKU0MgT2JqLUMgQVBJLgorICAgICAgICAqIGJpbmRpbmdzL29iamMvV2Vi
U2NyaXB0T2JqZWN0Lm1tOiBKU0M6OkpTVmFsdWUgYW5kIEpTVmFsdWUgY29uZmxpY3Qgd2l0aCBv
bmUgYW5vdGhlciwgc28gd2UgaGF2ZSB0byBiZSBtb3JlIHNwZWNpZmljLgorICAgICAgICAoLVtX
ZWJTY3JpcHRPYmplY3QgX2dsb2JhbENvbnRleHRSZWZdKTogVXNlZnVsIGhlbHBlciBmdW5jdGlv
biBmb3IgZ2V0dGluZyB0aGUgSlNHbG9iYWxDb250ZXh0UmVmIG9mIGEgcGFydGljdWxhciBXZWJT
Y3JpcHRPYmplY3QuCisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBjYWxsV2ViU2NyaXB0TWV0
aG9kOndpdGhBcmd1bWVudHM6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0
ZVdlYlNjcmlwdDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0p
OgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgd2ViU2NyaXB0VmFsdWVBdEluZGV4Ol0pOgor
ICAgICAgICAoK1tXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOkpTQzo6
b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmpl
Y3QgSlNWYWx1ZV0pOiBJbXBsZW1lbnRhdGlvbiBvZiBjb252ZW5pZW5jZSBXZWJTY3JpcHRPYmpl
Y3QgY29udmVyc2lvbiBmdW5jdGlvbiB0byBuZXcgT2JqZWN0aXZlLUMgQVBJLgorICAgICAgICAq
IGJpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOgorCiAyMDEzLTAyLTE5ICBC
cmFuaW1pciBMYW1ib3YgIDxibGFtYm92QGdvb2dsZS5jb20+CiAKICAgICAgICAgRml4ICdzbGlj
ZScgYXNwZWN0IHJhdGlvIGNhbGN1bGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2
aXNpb24gMTQzMzgxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTUwMSw2ICs1MDEsOSBAQCBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIx
MGluaXRTY3JpCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxMWNyZWF0ZVdvcmxkRXYK
IF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjEzZXhlY3V0ZVNjcmlwdEVSS04zV1RGNlN0
cmluZ0ViCiBfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxN2NhbkV4ZWN1dGVTY3JpcHRz
RU5TXzMzUmVhc29uRm9yQ2FsbGluZ0NhbkV4ZWN1dGVTY3JpcHRzRQorI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECitfX1pON1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxN2phdmFTY3JpcHRDb250
ZXh0RXYKKyNlbmRpZgogX19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMTh3aW5kb3dTY3Jp
cHRPYmplY3RFdgogX19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMjBleGVjdXRlU2NyaXB0
SW5Xb3JsZEVQTlNfMTVET01XcmFwcGVyV29ybGRFUktOM1dURjZTdHJpbmdFYgogX19aTjdXZWJD
b3JlMTZTY3JpcHRDb250cm9sbGVyMjFwcm9jZXNzaW5nVXNlckdlc3R1cmVFdgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHJldmlz
aW9uIDE0MzM4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hl
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSlNET01X
aW5kb3dTaGVsbC5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJHQ0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKQEAgLTYwLDYgKzYxLDE0IEBAIHZvaWQgSlNE
T01XaW5kb3dTaGVsbDo6ZGVzdHJveShKU0NlbGwqIGMKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvd1NoZWxsKj4oY2VsbCktPkpTRE9NV2luZG93U2hlbGw6On5KU0RPTVdpbmRvd1NoZWxsKCk7
CiB9CiAKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6c2V0V2luZG93KEpTQzo6SlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0RPTVdpbmRvdyogd2luZG93KQoreworICAgIEFTU0VSVF9BUkcod2lu
ZG93LCB3aW5kb3cpOworICAgIHNldFRhcmdldChnbG9iYWxEYXRhLCB3aW5kb3cpOworICAgIHN0
cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSwgd2luZG93KTsKKyAgICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsK
K30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3coUGFzc1JlZlB0cjxET01XaW5k
b3c+IGRvbVdpbmRvdykKIHsKICAgICAvLyBSZXBsYWNpbmcgSlNET01XaW5kb3cgdmlhIHRlbGxp
bmcgSlNET01XaW5kb3dTaGVsbCB0byB1c2UgdGhlIHNhbWUgRE9NV2luZG93IGl0IGFscmVhZHkg
dXNlcyBtYWtlcyBubyBzZW5zZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIg
KzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCiAgICAgICAgIEpTRE9NV2luZG93KiB3aW5kb3coKSBjb25zdCB7IHJldHVy
biBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvdyo+KHRhcmdldCgpKTsgfQotICAgICAgICB2b2lkIHNl
dFdpbmRvdyhKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNET01XaW5kb3cqIHdpbmRv
dykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX0FSRyh3aW5kb3csIHdpbmRvdyk7Ci0g
ICAgICAgICAgICBzZXRUYXJnZXQoZ2xvYmFsRGF0YSwgd2luZG93KTsKLSAgICAgICAgICAgIHN0
cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERh
dGEoKSwgd2luZG93KTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHNldFdpbmRvdyhKU0M6OkpT
R2xvYmFsRGF0YSYsIEpTRE9NV2luZG93Kik7CiAgICAgICAgIHZvaWQgc2V0V2luZG93KFBhc3NS
ZWZQdHI8RE9NV2luZG93Pik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmgJKHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyQmFz
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdEluc3RhbmNlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8aGVhcC9TdHJvbmcuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM0LDYgKzM1LDcgQEAKICNpZiBQ
TEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogT0JKQ19DTEFTUyBXZWJT
Y3JpcHRPYmplY3Q7CitPQkpDX0NMQVNTIEpTQ29udGV4dDsKICNlbmRpZgogCiBzdHJ1Y3QgTlBP
YmplY3Q7CkBAIC0xNTEsNiArMTUzLDkgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIFdlYlNjcmlwdE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0KCk7CisjaWYgSlNDX09CSkNf
QVBJX0VOQUJMRUQKKyAgICBKU0NvbnRleHQgKmphdmFTY3JpcHRDb250ZXh0KCk7CisjZW5kaWYK
ICNlbmRpZgogCiAgICAgSlNDOjpKU09iamVjdCoganNPYmplY3RGb3JQbHVnaW5FbGVtZW50KEhU
TUxQbHVnSW5FbGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIm9iamNfaW5zdGFuY2UuaCIKICNpbXBvcnQgInJ1
bnRpbWVfcm9vdC5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KICNpbXBvcnQgPHJ1bnRpbWUv
SlNMb2NrLmg+CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTEwOSw2ICsx
MTAsMTYgQEAgV2ViU2NyaXB0T2JqZWN0KiBTY3JpcHRDb250cm9sbGVyOjp3aW5kbwogICAgIHJl
dHVybiBtX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQoKTsKIH0KIAorI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECitKU0NvbnRleHQgKlNjcmlwdENvbnRyb2xsZXI6OmphdmFTY3JpcHRDb250ZXh0KCkK
K3sKKyAgICBpZiAoIWNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBj
b250ZXh0RnJvbUdsb2JhbENvbnRleHRSZWY6dG9HbG9iYWxSZWYoYmluZGluZ1Jvb3RPYmplY3Qo
KS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSldOworICAgIHJldHVybiBjb250ZXh0Owor
fQorI2VuZGlmCisKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TY3JpcHRP
YmplY3RzKCkKIHsKICAgICBpZiAobV93aW5kb3dTY3JpcHRPYmplY3QpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QuaAkocmV2aXNpb24g
MTQzMzgxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAorI2lmbmRlZiBXZWJTY3JpcHRPYmplY3RfaAorI2RlZmluZSBXZWJTY3JpcHRPYmplY3RfaAor
CiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0pTQmFzZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvV2ViS2l0QXZhaWxhYmlsaXR5
Lmg+CkBAIC0xODksNiArMTkyLDcgQEAgQGludGVyZmFjZSBOU09iamVjdCAoV2ViU2NyaXB0aW5n
KQogCiAvLyBXZWJTY3JpcHRPYmplY3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAorQGNsYXNzIEpTVmFsdWU7CiBAY2xhc3MgV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZTsKIEBjbGFzcyBXZWJGcmFtZTsKIApAQCAtMjk3LDYgKzMwMSwxNyBAQCBAaW50
ZXJmYWNlIFdlYlNjcmlwdE9iamVjdCA6IE5TT2JqZWN0CiAqLwogLSAodm9pZClzZXRFeGNlcHRp
b246KE5TU3RyaW5nICopZGVzY3JpcHRpb247CiAKKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CisvKiEKKyAgICBAbWV0aG9kIEpTVmFsdWUKKyAgICBAcmVzdWx0IFRoZSBlcXVpdmFsZW50IE9i
amVjdGl2ZS1DIEpTVmFsdWUgZm9yIHRoaXMgV2ViU2NyaXB0T2JqZWN0LgorICAgIEBkaXNjdXNz
aW9uIFVzZSB0aGlzIG1ldGhvZCB0byBicmlkZ2UgYmV0d2VlbiB0aGUgV2ViU2NyaXB0T2JqZWN0
IGFuZCAKKyAgICBKYXZhU2NyaXB0Q29yZSBPYmplY3RpdmUtQyBBUElzLgorKi8KKy0gKEpTVmFs
dWUgKilKU1ZhbHVlOworI2VuZGlmCisKIEBlbmQKIAogCkBAIC0zMTYsMyArMzMxLDUgQEAgQGlu
dGVyZmFjZSBXZWJVbmRlZmluZWQgOiBOU09iamVjdCA8TlNDbwogQGVuZAogCiAjZW5kaWYKKwor
I2VuZGlmIC8vIFdlYlNjcmlwdE9iamVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMTQzMzgxKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDggQEAKICNpbXBvcnQgInJ1bnRpbWVfb2JqZWN0LmgiCiAjaW1wb3J0
ICJydW50aW1lX3Jvb3QuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dEludGVybmFsLmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU1ZhbHVlSW50ZXJuYWwuaD4KICNpbXBvcnQgPGludGVycHJldGVyL0NhbGxG
cmFtZS5oPgogI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0
IDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CkBAIC01MywxMCArNTUsMjIgQEAKICNpbXBvcnQg
PHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKK3VzaW5nIEpTQzo6Q2FsbERhdGE7Cit1c2luZyBKU0M6OkNh
bGxUeXBlOwordXNpbmcgSlNDOjpDYWxsVHlwZU5vbmU7Cit1c2luZyBKU0M6OkV4ZWNTdGF0ZTsK
K3VzaW5nIEpTQzo6SWRlbnRpZmllcjsKK3VzaW5nIEpTQzo6SlNMb2NrSG9sZGVyOwordXNpbmcg
SlNDOjpKU09iamVjdDsKK3VzaW5nIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXI7Cit1c2luZyBK
U0M6OlB1dFByb3BlcnR5U2xvdDsKK3VzaW5nIEpTQzo6anNDYXN0OwordXNpbmcgSlNDOjpqc1Vu
ZGVmaW5lZDsKK3VzaW5nIEpTQzo6bWFrZVNvdXJjZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBzdGF0aWMgTlNNYXBUYWJsZSogSlNXcmFwcGVyQ2FjaGU7CkBAIC0yMzYsNiArMjUwLDEzIEBA
IC0gKEJPT0wpX2lzU2FmZVNjcmlwdAogICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coX3ByaXZhdGUtPm9yaWdpblJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHRhcmdldC0+aW1wbCgpKTsKIH0KIAorLSAoSlNHbG9i
YWxDb250ZXh0UmVmKV9nbG9iYWxDb250ZXh0UmVmCit7CisgICAgaWYgKCFbc2VsZiBfaXNTYWZl
U2NyaXB0XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gdG9HbG9iYWxSZWYoW3Nl
bGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKTsKK30KKwogLSAo
b25ld2F5IHZvaWQpcmVsZWFzZQogewogICAgIC8vIElmIHdlJ3JlIHJlbGVhc2luZyB0aGUgbGFz
dCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QsIHJlbW92ZSBpZiBmcm9tIHRoZSBtYXAuCkBAIC0z
MDQsNyArMzI1LDcgQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQog
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOwogCi0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywg
SWRlbnRpZmllcihleGVjLCBTdHJpbmcobmFtZSkpKTsKKyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rp
b24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKG5hbWUp
KSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpCkBAIC0zMTcsNyArMzM4LDcgQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNT
dHJpbmcgKiluYQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgW3NlbGYgX3Jvb3RPYmplY3Rd
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3NlbGYgX2ltcF0sIGFyZ0xpc3QpOworICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVu
Y3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3NlbGYgX2ltcF0sIGFyZ0xpc3QpOwogICAgIFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hl
Y2tlci5zdG9wKCk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTM0Myw3
ICszNjQsNyBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgCiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAg
SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhl
YywgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpLCAwKTsKKyAgICBK
U0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRl
KGV4ZWMsIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CiAg
ICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVv
dXRDaGVja2VyLnN0b3AoKTsKIAogICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3Qg
X2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVyblZhbHVlIG9yaWdpblJvb3RPYmplY3Q6W3Nl
bGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKQEAg
LTM4NSw3ICs0MDYsNyBAQCAtIChpZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICAg
ICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5lbnRseSBoZWxkCiAgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2Vs
ZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgU3RyaW5nKGtleSkpKTsKKyAgICAg
ICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmll
cihleGVjLCBTdHJpbmcoa2V5KSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CkBA
IC00NjQsNyArNDg1LDcgQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClp
bgogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMs
IGluZGV4KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVj
LCBpbmRleCk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgYWRk
RXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAtNTExLDcgKzUzMiw3IEBAIC0gKEpTT2JqZWN0
UmVmKUpTT2JqZWN0CiAgICAgcmV0dXJuIHRvUmVmKFtzZWxmIF9pbXBdKTsKIH0KIAotKyAoaWQp
X2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6
KFJvb3RPYmplY3QqKW9yaWdpblJvb3RPYmplY3Qgcm9vdE9iamVjdDooUm9vdE9iamVjdCopcm9v
dE9iamVjdAorKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6OkpTVmFsdWUpdmFs
dWUgb3JpZ2luUm9vdE9iamVjdDooUm9vdE9iamVjdCopb3JpZ2luUm9vdE9iamVjdCByb290T2Jq
ZWN0OihSb290T2JqZWN0Kilyb290T2JqZWN0CiB7CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkp
IHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTU1NSw2
ICs1NzYsMTggQEAgKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQogICAg
IHJldHVybiBuaWw7CiB9CiAKKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECistIChKU1ZhbHVl
ICopSlNWYWx1ZQoreworICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTpbc2VsZiBK
U09iamVjdF0gCisgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpbSlNDb250ZXh0IGNvbnRl
eHRGcm9tR2xvYmFsQ29udGV4dFJlZjpbc2VsZiBfZ2xvYmFsQ29udGV4dFJlZl1dXTsKK30KKyNl
bmRpZgorCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViU2NyaXB0T2JqZWN0IChXZWJLaXRDb2NvYUJp
bmRpbmdzKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmpl
Y3RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9X
ZWJTY3JpcHRPYmplY3RQcml2YXRlLmgJKHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw2ICs1Nyw3IEBAIEBpbnRlcmZhY2UgV2ViU2NyaXB0T2JqZWN0IChQcml2YXRlKQog
LSAoQk9PTClfaGFzSW1wOwogLSAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCopX3Jvb3RPYmpl
Y3Q7CiAtIChKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Kilfb3JpZ2luUm9vdE9iamVjdDsKKy0g
KEpTR2xvYmFsQ29udGV4dFJlZilfZ2xvYmFsQ29udGV4dFJlZjsKIEBlbmQKIAogQGludGVyZmFj
ZSBXZWJTY3JpcHRPYmplY3QgKFN0YWdlZEZvclB1YmxpYykKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MzM4OSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxt
aGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEg
d2F5IHRvIHVzZSB0aGUgT2JqZWN0aXZlLUMgSmF2YVNjcmlwdCBBUEkgd2l0aCBXZWJLaXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjA1OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uIG9m
IGFwcHJvcHJpYXRlIGRlbGVnYXRlIGNhbGxiYWNrcyBhbmQgc3VwcG9ydCB0byB0aGUgV2ViS2l0
IEFQSS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1t
OgorICAgICAgICAqIFdlYlZpZXcvV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaDoK
KyAgICAgICAgKFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSk6CisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06
CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0
cmluZzpmb3JjZVVzZXJHZXN0dXJlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6d2l0aEdsb2JhbE9iamVjdDppblNjcmlwdFdv
cmxkOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfamF2YVNjcmlwdENvbnRleHRGb3JTY3JpcHRX
b3JsZDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgamF2YVNjcmlwdENvbnRleHRdKToKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkZyYW1lTG9hZERlbGVnYXRlLmg6CisgICAgICAgICogV2ViVmlldy9X
ZWJGcmFtZVByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdh
dGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENhbGxGcmFtZSBfY29udmVydFZhbHVlVG9PYmpj
VmFsdWU6SlNDOjpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0Q2FsbEZyYW1lIGV4Y2VwdGlvbl0p
OgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJhbWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
U2NyaXB0V29ybGQubW06CisgICAgICAgICgrW1dlYlNjcmlwdFdvcmxkIHNjcmlwdFdvcmxkRm9y
SmF2YVNjcmlwdENvbnRleHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAg
ICAgICAoLVtXZWJWaWV3IF9jYWNoZUZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zXSk6
CisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6CisgICAgICAgICgtW1dlYlZpZXcgYWVEZXNj
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6XSk6CisgICAgICAgICgtW1dlYlZpZXcg
X2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbzpmb3JFbGVtZW50Ol0pOgorCiAyMDEz
LTAyLTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIGEgRGVmYXVsdEhhc2ggZm9yIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tCShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzQsNiAr
NzQsNyBAQAogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0
ZVByaXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGlj
YXRpb25DRi5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbk1hYy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuaD4KQEAgLTExNyw2ICsxMTgsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dpZGdldC5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYktp
dC9ET01IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTE5NTAsNyArMTk1MiwxNCBAQCB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENsCiAgICAgRnJhbWUgKmZyYW1lID0gY29yZSht
X3dlYkZyYW1lLmdldCgpKTsKICAgICBTY3JpcHRDb250cm9sbGVyICpzY3JpcHQgPSBmcmFtZS0+
c2NyaXB0KCk7CiAKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgIGlmIChpbXBsZW1lbnRh
dGlvbnMtPmRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0Rm9yRnJhbWVGdW5jKSB7CisgICAgICAg
IENhbGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZENyZWF0ZUphdmFTY3Jp
cHRDb250ZXh0Rm9yRnJhbWVGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpkaWRDcmVh
dGVKYXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZTopLAorICAgICAgICAgICAgc2NyaXB0LT5qYXZh
U2NyaXB0Q29udGV4dCgpLCBtX3dlYkZyYW1lLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKGltcGxl
bWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpIHsKKyNlbHNlCiAg
ICAgaWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMp
IHsKKyNlbmRpZgogICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25z
LT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdl
YlZpZXc6ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwKICAgICAgICAgICAgIHNjcmlw
dC0+d2luZG93U2NyaXB0T2JqZWN0KCksIG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIH0gZWxzZSBp
ZiAoaW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGVGdW5jKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25D
YWNoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEZWxl
Z2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oCShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgc3RydWN0IFdlYlJlc291cmNlRGVsZWdhdGVJ
bXBsZW1lbnRhdGlvbgogfTsKIAogc3RydWN0IFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSB7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICBJTVAgZGlkQ3JlYXRl
SmF2YVNjcmlwdENvbnRleHRGb3JGcmFtZUZ1bmM7CisjZW5kaWYKICAgICBJTVAgZGlkQ2xlYXJX
aW5kb3dPYmplY3RGb3JGcmFtZUZ1bmM7CiAgICAgSU1QIGRpZENsZWFyV2luZG93T2JqZWN0Rm9y
RnJhbWVJblNjcmlwdFdvcmxkRnVuYzsKICAgICBJTVAgZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dP
YmplY3RGb3JGcmFtZUZ1bmM7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5o
CShyZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogQGNsYXNzIERPTURvY3VtZW50
OwogQGNsYXNzIERPTUhUTUxFbGVtZW50OworQGNsYXNzIEpTQ29udGV4dDsKIEBjbGFzcyBOU1VS
TFJlcXVlc3Q7CiBAY2xhc3MgV2ViQXJjaGl2ZTsKIEBjbGFzcyBXZWJEYXRhU291cmNlOwpAQCAt
MjEzLDQgKzIxNCwxNCBAQCBAaW50ZXJmYWNlIFdlYkZyYW1lIDogTlNPYmplY3QKICAgICBicmlk
Z2UgYmV0d2VlbiB0aGUgV2ViS2l0IGFuZCBKYXZhU2NyaXB0Q29yZSBBUElzLgogKi8KIC0gKEpT
R2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OworCisjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKKy8qIQorICAgIEBtZXRob2QgamF2YVNjcmlwdENvbnRleHQKKyAgICBAcmVzdWx0IFRoZSBm
cmFtZSdzIGdsb2JhbCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBVc2UgdGhpcyBtZXRo
b2QgdG8gCisgICAgYnJpZGdlIGJldHdlZW4gdGhlIFdlYktpdCBhbmQgT2JqZWN0aXZlLUMgSmF2
YVNjcmlwdENvcmUgQVBJLgorKi8KKy0gKEpTQ29udGV4dCAqKWphdmFTY3JpcHRDb250ZXh0Owor
I2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTQzMzgxKQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBA
QAogI2ltcG9ydCAiV2ViU2NyaXB0V29ybGRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViVmlld0lu
dGVybmFsLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KU0NvbnRleHRJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9BWE9i
amVjdENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlPYmplY3QuaD4KICNp
bXBvcnQgPFdlYkNvcmUvQW5pbWF0aW9uQ29udHJvbGxlci5oPgpAQCAtMTA2LDcgKzEwNyw2IEBA
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7
CiB1c2luZyBKU0M6OkpTTG9jazsKLXVzaW5nIEpTQzo6SlNWYWx1ZTsKIAogLyoKIEhlcmUgaXMg
dGhlIGN1cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25z
OgpAQCAtNTgwLDcgKzU4MCw3IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3IKICAgICBBU1NFUlQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAg
UmV0YWluUHRyPFdlYkZyYW1lPiBwcm90ZWN0KHNlbGYpOyAvLyBFeGVjdXRpbmcgYXJiaXRyYXJ5
IEphdmFTY3JpcHQgY2FuIGRlc3Ryb3kgdGhlIGZyYW1lLgogICAgIAotICAgIEpTVmFsdWUgcmVz
dWx0ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc3RyaW5n
LCBmb3JjZVVzZXJHZXN0dXJlKS5qc1ZhbHVlKCk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHN0cmluZywgZm9y
Y2VVc2VyR2VzdHVyZSkuanNWYWx1ZSgpOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1l
KSAvLyBJbiBjYXNlIHRoZSBzY3JpcHQgcmVtb3ZlZCBvdXIgZnJhbWUgZnJvbSB0aGUgcGFnZS4K
ICAgICAgICAgcmV0dXJuIEAiIjsKQEAgLTEwNTksNyArMTA1OSw3IEBAIC0gKE5TU3RyaW5nICop
X3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICBBU1NFUlQoZnJhbWUtPmRvY3VtZW50KCkp
OwogICAgIFJldGFpblB0cjxXZWJGcmFtZT4gd2ViRnJhbWUoa2l0KGZyYW1lKSk7IC8vIFJ1bm5p
bmcgYXJiaXRyYXJ5IEphdmFTY3JpcHQgY2FuIGRlc3Ryb3kgdGhlIGZyYW1lLgogCi0gICAgSlNW
YWx1ZSByZXN1bHQgPSBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHRJbldvcmxkKGNvcmUo
d29ybGQpLCBzdHJpbmcsIHRydWUpLmpzVmFsdWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0
ID0gZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0SW5Xb3JsZChjb3JlKHdvcmxkKSwgc3Ry
aW5nLCB0cnVlKS5qc1ZhbHVlKCk7CiAKICAgICBpZiAoIXdlYkZyYW1lLT5fcHJpdmF0ZS0+Y29y
ZUZyYW1lKSAvLyBJbiBjYXNlIHRoZSBzY3JpcHQgcmVtb3ZlZCBvdXIgZnJhbWUgZnJvbSB0aGUg
cGFnZS4KICAgICAgICAgcmV0dXJuIEAiIjsKQEAgLTEwODYsNiArMTA4NiwxNiBAQCAtIChKU0ds
b2JhbENvbnRleHRSZWYpX2dsb2JhbENvbnRleHRGb3JTCiAgICAgcmV0dXJuIHRvR2xvYmFsUmVm
KGNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChjb3JlV29ybGQpLT5nbG9iYWxFeGVj
KCkpOwogfQogCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKy0gKEpTQ29udGV4dCAqKV9qYXZh
U2NyaXB0Q29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkCit7Cisg
ICAgSlNHbG9iYWxDb250ZXh0UmVmIGdsb2JhbENvbnRleHRSZWYgPSBbc2VsZiBfZ2xvYmFsQ29u
dGV4dEZvclNjcmlwdFdvcmxkOndvcmxkXTsKKyAgICBpZiAoIWdsb2JhbENvbnRleHRSZWYpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBbSlNDb250ZXh0IGNvbnRleHRGcm9tR2xvYmFs
Q29udGV4dFJlZjpnbG9iYWxDb250ZXh0UmVmXTsKK30KKyNlbmRpZgorCiAtICh2b2lkKXNldEFs
bG93c1Njcm9sbGVyc1RvT3ZlcmxhcENvbnRlbnQ6KEJPT0wpZmxhZwogewogICAgIEFTU0VSVChb
W1tzZWxmIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkR5bmFtaWNT
Y3JvbGxCYXJzVmlldyBjbGFzc11dKTsKQEAgLTE0NzEsNCArMTQ4MSwxNCBAQCAtIChKU0dsb2Jh
bENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dAogICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJh
bWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9i
YWxFeGVjKCkpOwogfQogCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKy0gKEpTQ29udGV4dCAq
KWphdmFTY3JpcHRDb250ZXh0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5j
b3JlRnJhbWU7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBjb3JlRnJhbWUtPnNjcmlwdCgpLT5qYXZhU2NyaXB0Q29udGV4dCgpOworfQorI2VuZGlm
CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVMb2FkRGVs
ZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
TG9hZERlbGVnYXRlLmgJKHJldmlzaW9uIDE0MzM4MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWVMb2FkRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDQgKzE5
NCwxOSBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJGcmFtZUxvYWREZWxlZ2F0CiAqLwogLSAo
dm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyB3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFi
bGU6KFdlYlNjcmlwdE9iamVjdCAqKXdpbmRvd1NjcmlwdE9iamVjdCBXRUJLSVRfT0JKQ19NRVRI
T0RfQU5OT1RBVElPTihBVkFJTEFCTEVfV0VCS0lUX1ZFUlNJT05fMV8zX0FORF9MQVRFUl9CVVRf
REVQUkVDQVRFRF9JTl9XRUJLSVRfVkVSU0lPTl8zXzApOwogCisjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKKy8qIQorICAgIEBtZXRob2Qgd2ViVmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4
dDpjb250ZXh0Rm9yRnJhbWU6CisgICAgQGFic3RyYWN0IE5vdGlmaWVzIHRoZSBkZWxlZ2F0ZSB0
aGF0IGEgbmV3IEphdmFTY3JpcHQgY29udGV4dCBoYXMgYmVlbiBjcmVhdGVkIGNyZWF0ZWQuCisg
ICAgQHBhcmFtIHdlYlZpZXcgVGhlIFdlYlZpZXcgc2VuZGluZyB0aGUgbWVzc2FnZS4KKyAgICBA
cGFyYW0gY29udGV4dCBUaGUgSlNDb250ZXh0IHJlcHJlc2VudGluZyB0aGUgZnJhbWUncyBKYXZh
U2NyaXB0IHdpbmRvdyBvYmplY3QuCisgICAgQHBhcmFtIGZyYW1lIFRoZSBXZWJGcmFtZSB0byB3
aGljaCB0aGUgY29udGV4dCBiZWxvbmdzLgorICAgIEBkaXNjdXNzaW9uIElmIGEgZGVsZWdhdGUg
aW1wbGVtZW50cyB3ZWJWaWV3OmRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0OmZvckZyYW1lOiBh
bG9uZyB3aXRoIGVpdGhlciAKKyAgICB3ZWJWaWV3OmRpZENsZWFyV2luZG93T2JqZWN0OmZvckZy
YW1lOiBvciB3ZWJWaWV3OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZTosIG9ubHkgCisgICAg
d2ViVmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZSB3aWxsIGJlIGludm9r
ZWQuIFRoaXMgZW5hYmxlcyBhIGRlbGVnYXRlIHRvIGltcGxlbWVudCAKKyAgICBtdWx0aXBsZSB2
ZXJzaW9ucyB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZl
cnNpb25zIG9mIFdlYktpdC4KKyovCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IGRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckZyYW1l
OihXZWJGcmFtZSAqKWZyYW1lOworI2VuZGlmCisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkocmV2aXNpb24gMTQzMzgxKQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNiArOTUsMTAgQEAgQGludGVyZmFjZSBXZWJGcmFtZSAoV2ViUHJpdmF0ZSkKIC0gKE5T
U3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmlu
ZyAqKXN0cmluZyB3aXRoR2xvYmFsT2JqZWN0OihKU09iamVjdFJlZilnbG9iYWxPYmplY3QgaW5T
Y3JpcHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZDsKIC0gKEpTR2xvYmFsQ29udGV4dFJl
ZilfZ2xvYmFsQ29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkOwog
CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKy0gKEpTQ29udGV4dCAqKV9qYXZhU2NyaXB0Q29u
dGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkOworI2VuZGlmCisKIC0g
KHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQg
KilmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFy
dFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZTsK
IC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVj
dFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClz
bWFydFJlcGxhY2U7CiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aE1hcmt1cFN0cmluZzoo
TlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJM
U3RyaW5nIHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVw
bGFjZTooQk9PTClzbWFydFJlcGxhY2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAxNDMzODEpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgTlNTdHJpbmcgKiBjb25zdCBXZWJTY3JpcHRF
cnJvckxpbmVOdW1iZQogCiBAaW50ZXJmYWNlIFdlYlNjcmlwdENhbGxGcmFtZSAoV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZUludGVybmFsKQogCi0tIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6
KEpTVmFsdWUpdmFsdWU7CistIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNW
YWx1ZSl2YWx1ZTsKIAogQGVuZAogCkBAIC0xMTMsNyArMTEzLDcgQEAgLSAodm9pZClfY2xlYXJE
ZWJ1Z2dlckNhbGxGcmFtZQogICAgIF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSA9IDA7CiB9
CiAKLS0gKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZSl2YWx1ZQorLSAoaWQp
X2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6OkpTVmFsdWUpdmFsdWUKIHsKICAgICBpZiAo
IXZhbHVlKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMjE0LDcgKzIxNCw3IEBAIC0gKGlkKWV4
Y2VwdGlvbgogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBfcHJpdmF0ZS0+ZGVidWdnZXJD
YWxsRnJhbWUtPmV4Y2VwdGlvbigpOworICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24gPSBfcHJp
dmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV4Y2VwdGlvbigpOwogICAgIHJldHVybiBleGNlcHRp
b24gPyBbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6ZXhjZXB0aW9uXSA6IG5pbDsKIH0K
IApAQCAtMjQxLDE1ICsyNDEsMTUgQEAgLSAoaWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5n
ICopc2NyaQogCiAgICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RT
Y29wZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KTsKIAotICAgICAg
ICBKU1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZUlu
R2xvYmFsQ2FsbEZyYW1lKHNjcmlwdCwgZXhjZXB0aW9uLCBnbG9iYWxPYmplY3QpOworICAgICAg
ICBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uOworICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
ZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShzY3JpcHQsIGV4Y2VwdGlvbiwgZ2xvYmFsT2JqZWN0
KTsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgIHJldHVybiBbc2VsZiBfY29u
dmVydFZhbHVlVG9PYmpjVmFsdWU6ZXhjZXB0aW9uXTsKICAgICAgICAgcmV0dXJuIHJlc3VsdCA/
IFtzZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHRdIDogbmlsOyAgICAgICAgCiAg
ICAgfQogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBfcHJp
dmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsKKyAg
ICBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBfcHJp
dmF0ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsKICAg
ICBpZiAoZXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2Jq
Y1ZhbHVlOmV4Y2VwdGlvbl07CiAgICAgcmV0dXJuIHJlc3VsdCA/IFtzZWxmIF9jb252ZXJ0VmFs
dWVUb09iamNWYWx1ZTpyZXN1bHRdIDogbmlsOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJTY3JpcHRXb3JsZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViU2NyaXB0V29ybGQuaAkocmV2aXNpb24gMTQzMzgxKQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsy
Miw5IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpT
R2xvYmFsQ29udGV4dFJlZjsKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KIAor
QGNsYXNzIEpTQ29udGV4dDsKIEBjbGFzcyBXZWJTY3JpcHRXb3JsZFByaXZhdGU7CiAKIEBpbnRl
cmZhY2UgV2ViU2NyaXB0V29ybGQgOiBOU09iamVjdCB7CkBAIC0zNSw2ICszNiw5IEBAIEBpbnRl
cmZhY2UgV2ViU2NyaXB0V29ybGQgOiBOU09iamVjdCB7CiArIChXZWJTY3JpcHRXb3JsZCAqKXdv
cmxkOwogCiArIChXZWJTY3JpcHRXb3JsZCAqKXNjcmlwdFdvcmxkRm9yR2xvYmFsQ29udGV4dDoo
SlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKKysgKFdlYlNjcmlwdFdvcmxkICopc2NyaXB0V29ybGRGb3JKYXZhU2NyaXB0Q29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dDsKKyNlbmRpZgogCiAtICh2b2lkKXVucmVnaXN0ZXJXb3JsZDsK
IApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxkLm1tCShy
ZXZpc2lvbiAxNDMzODEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdv
cmxkLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0pTRE9NQmluZGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU0NvbnRleHRJbnRlcm5hbC5oPgogCiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTEw
Niw2ICsxMDcsMTMgQEAgKyAoV2ViU2NyaXB0V29ybGQgKilzY3JpcHRXb3JsZEZvckdsb2JhbAog
ICAgIHJldHVybiBbc2VsZiBmaW5kT3JDcmVhdGVXb3JsZDpjdXJyZW50V29ybGQodG9KUyhjb250
ZXh0KSldOwogfQogCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKysgKFdlYlNjcmlwdFdvcmxk
ICopc2NyaXB0V29ybGRGb3JKYXZhU2NyaXB0Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAor
eworICAgIHJldHVybiBbc2VsZiBzY3JpcHRXb3JsZEZvckdsb2JhbENvbnRleHQ6Y29udGV4dElu
dGVybmFsQ29udGV4dChjb250ZXh0KV07Cit9CisjZW5kaWYKKwogQGVuZAogCiBAaW1wbGVtZW50
YXRpb24gV2ViU2NyaXB0V29ybGQgKFdlYkludGVybmFsKQpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTQzMzgxKQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU5LDYgKzE2NTksOSBAQCAt
ICh2b2lkKV9jYWNoZUZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50CiAgICAgY2FjaGUtPmRpZFB1
c2hTdGF0ZVdpdGhpblBhZ2VGb3JGcmFtZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxl
Y3Rvcih3ZWJWaWV3OmRpZFB1c2hTdGF0ZVdpdGhpblBhZ2VGb3JGcmFtZTopKTsKICAgICBjYWNo
ZS0+ZGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZUZvckZyYW1lRnVuYyA9IGdldE1ldGhvZChkZWxl
Z2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZUZvckZyYW1l
OikpOwogICAgIGNhY2hlLT5kaWRQb3BTdGF0ZVdpdGhpblBhZ2VGb3JGcmFtZUZ1bmMgPSBnZXRN
ZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZFBvcFN0YXRlV2l0aGluUGFnZUZv
ckZyYW1lOikpOworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgY2FjaGUtPmRpZENyZWF0
ZUphdmFTY3JpcHRDb250ZXh0Rm9yRnJhbWVGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2Vs
ZWN0b3Iod2ViVmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZTopKTsKKyNl
bmRpZgogICAgIGNhY2hlLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYyA9IGdldE1l
dGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6Zm9y
RnJhbWU6KSk7CiAgICAgY2FjaGUtPmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblNjcmlw
dFdvcmxkRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RGb3JGcmFtZTppblNjcmlwdFdvcmxkOikpOwogICAgIGNhY2hlLT5kaWRD
bGVhckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0
ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3Q6Zm9yRnJh
bWU6KSk7CkBAIC00OTE0LDcgKzQ5MTcsNyBAQCAtIChCT09MKXNob3VsZENsb3NlCiAgICAgcmV0
dXJuIGNvcmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZENsb3NlKCk7CiB9CiAKLXN0YXRpYyBOU0Fw
cGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUganNWYWx1ZSkKK3N0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9t
SlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQogewogICAgIE5T
QXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzYyA9IDA7CiAgICAgaWYgKGpzVmFsdWUuaXNCb29s
ZWFuKCkpCkBAIC00OTU1LDcgKzQ5NTgsNyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRv
ciogYWVEZXNjRnJvCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFlRGVzYzsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IG9iamVjdC0+dG9Qcmlt
aXRpdmUoZXhlYyk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSBwcmltaXRpdmUgPSBvYmplY3QtPnRv
UHJpbWl0aXZlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAg
ICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gW05T
QXBwbGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3JdOwpAQCAtNDk3NSw3ICs0OTc4LDcg
QEAgLSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbAogICAgICAgICByZXR1
cm4gbmlsOwogICAgIGlmICghY29yZUZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNj
cmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
Y29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUo
KTsKICAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBhc3MgZXJyb3JzCiAgICAgICAgIHJldHVy
biAwOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9i
amVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSk7CkBAIC02Njk3LDcg
KzY3MDAsNyBAQCAtIChKU1ZhbHVlUmVmKV9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzCiAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIEpTVmFsdWUganNWYWx1ZSA9IHRv
SlMoZXhlYywgdmFsdWUpOworICAgIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2
YWx1ZSk7CiAgICAgaWYgKCFqc1ZhbHVlLmluaGVyaXRzKCZKU0VsZW1lbnQ6OnNfaW5mbykpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU0VsZW1l
bnQqIGpzRWxlbWVudCA9IHN0YXRpY19jYXN0PEpTRWxlbWVudCo+KGFzT2JqZWN0KGpzVmFsdWUp
KTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MzM4OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDEzLTAyLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgd2F5IHRvIHVzZSB0
aGUgT2JqZWN0aXZlLUMgSmF2YVNjcmlwdCBBUEkgd2l0aCBXZWJLaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjA1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0cyBmb3IgdGhl
IFdlYktpdCBBUEkgcG9ydGlvbiBvZiB0aGUgSlNDIE9iamVjdGl2ZS1DIEFQSS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0pTQ29udGV4dEJhY2tGb3J3YXJk
Q2FjaGUxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0pT
Q29udGV4dEJhY2tGb3J3YXJkQ2FjaGUyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvbWFjL1dlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbTogQWRk
ZWQuCisgICAgICAgICgtW015Q29uc29sZSBsb2c6XSk6CisgICAgICAgICgtW015Q29uc29sZSBw
cmludEhlbGxvV29ybGRdKToKKyAgICAgICAgKC1bTXlDb25zb2xlIGFkZDp0bzpdKToKKyAgICAg
ICAgKC1bRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3
OmRpZEZpbmlzaExvYWRGb3JGcmFtZTpdKToKKyAgICAgICAgKC1bRGlkQ3JlYXRlSmF2YVNjcmlw
dENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3OmRpZENyZWF0ZUphdmFTY3JpcHRDb250
ZXh0OmZvckZyYW1lOl0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKwogMjAxMy0wMi0xOSAgSGFucyBNdWxsZXIgIDxobXVsbGVyQGFk
b2JlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGRpbmcgbXlzZWxmIGFzIGEgY29tbWl0
dGVyLgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0MzM4MSkKKysrIFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDkgQEAKIAkJQzBCRDY2OUYxMzFEM0NGRjAw
RTE4RjJBIC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVuZGxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQkQ2NjlFMTMx
RDNDRkYwMEUxOEYyQSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyRG9lc250RmlyZUVhcmx5X0J1bmRs
ZS5jcHAgKi87IH07CiAJCUMwQzVEM0JFMTQ1OThCNkYwMEE4MDJBNiAvKiBHZXRCYWNraW5nU2Nh
bGVGYWN0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMEM1RDNCQzE0NTk4QjZGMDBBODAyQTYgLyogR2V0QmFja2luZ1NjYWxlRmFjdG9yLm1tICov
OyB9OwogCQlDMEM1RDNDNjE0NTk5MTI5MDBBODAyQTYgLyogR2V0QmFja2luZ1NjYWxlRmFjdG9y
X0J1bmRsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMwQzVEM0JEMTQ1OThCNkYwMEE4MDJBNiAvKiBHZXRCYWNraW5nU2NhbGVGYWN0b3JfQnVuZGxl
Lm1tICovOyB9OworCQlDMkNGOTc1QTE2Q0VDNzE0MDA1NEU5OUQgLyogSlNDb250ZXh0QmFja0Zv
cndhcmRDYWNoZTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMkNGOTc1OTE2Q0VDNjlFMDA1NEU5OUQgLyogSlNDb250ZXh0QmFja0Zv
cndhcmRDYWNoZTIuaHRtbCAqLzsgfTsKKwkJQzJDRjk3NUIxNkNFQzcxQjAwNTRFOTlEIC8qIEpT
Q29udGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDRjk3NTgxNkNFQzY5RTAwNTRFOTlEIC8qIEpT
Q29udGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwgKi87IH07CisJCUMyRUIyREQzMTZDQUM3QUMw
MDlCNTJFRSAvKiBXZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVCMkREMTE2Q0FDN0FDMDA5
QjUyRUUgLyogV2ViVmlld0RpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0Lm1tICovOyB9OwogCQlD
NTA3RThBNzE0QzY1NDVCMDA1RDZCM0IgLyogSW5zcGVjdG9yQmFyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUwN0U4QTYxNEM2NTQ1QjAwNUQ2QjNC
IC8qIEluc3BlY3RvckJhci5tbSAqLzsgfTsKIAkJQzUxQUZCOTkxNjlGNDlGRjAwOUNDRjY2IC8q
IEZpbmRNYXRjaGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzUxQUZCOTgxNjlGNDlGRjAwOUNDRjY2IC8qIEZpbmRNYXRjaGVzLm1tICovOyB9Owog
CQlDNTQwRjc3NjE1MkU0REEwMDBBNDBDOEMgLyogU2ltcGxpZnlNYXJrdXAubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQwRjc3NTE1MkU0REEwMDBB
NDBDOEMgLyogU2ltcGxpZnlNYXJrdXAubW0gKi87IH07CkBAIC0yMjYsNiArMjI5LDggQEAKIAkJ
CWRzdFBhdGggPSBUZXN0V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRlclNwZWMg
PSA3OwogCQkJZmlsZXMgPSAoCisJCQkJQzJDRjk3NUIxNkNFQzcxQjAwNTRFOTlEIC8qIEpTQ29u
dGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJQzJD
Rjk3NUExNkNFQzcxNDAwNTRFOTlEIC8qIEpTQ29udGV4dEJhY2tGb3J3YXJkQ2FjaGUyLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4
LWNoYXJhY3RlcnMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkzNzkwMjhCOTE0RkFD
MjRDMDA3RTZCNDMgLyogYWNjZXB0c0ZpcnN0TW91c2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LywKIAkJCQlCNTVGMTFCRTE1MTkxQTA2MDA5MTU5MTYgLyogQWhlbS50dGYgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCkBAIC00NTYsNiArNDYxLDkgQEAKIAkJQzBCRDY2OUUxMzFEM0NGRjAwRTE4RjJB
IC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVuZGxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRG
aXJlRWFybHlfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUQz
QkMxNDU5OEI2RjAwQTgwMkE2IC8qIEdldEJhY2tpbmdTY2FsZUZhY3Rvci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdldEJhY2tpbmdTY2FsZUZhY3Rvci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUQzQkQxNDU5OEI2RjAwQTgwMkE2IC8q
IEdldEJhY2tpbmdTY2FsZUZhY3Rvcl9CdW5kbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBHZXRCYWNraW5nU2NhbGVGYWN0b3JfQnVuZGxlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMkNGOTc1ODE2Q0VDNjlFMDA1NEU5OUQgLyogSlNDb250
ZXh0QmFja0ZvcndhcmRDYWNoZTEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IEpT
Q29udGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyQ0Y5NzU5MTZDRUM2OUUwMDU0RTk5RCAvKiBKU0NvbnRleHRCYWNrRm9yd2FyZENhY2hl
Mi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSlNDb250ZXh0QmFja0ZvcndhcmRD
YWNoZTIuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJFQjJERDExNkNBQzdB
QzAwOUI1MkVFIC8qIFdlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZXdEaWRDcmVhdGVKYXZhU2Ny
aXB0Q29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUwN0U4QTYxNEM2
NTQ1QjAwNUQ2QjNCIC8qIEluc3BlY3RvckJhci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEluc3BlY3RvckJhci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzUxQUZCOTgxNjlGNDlGRjAwOUNDRjY2IC8qIEZpbmRNYXRjaGVzLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmluZE1hdGNoZXMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1NDBGNzc1MTUyRTREQTAwMEE0MEM4QyAvKiBTaW1wbGlm
eU1hcmt1cC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBs
aWZ5TWFya3VwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODE3LDYgKzgyNSw3
IEBACiAJCQkJNTFGQkJCNEMxNTEzRDRFOTAwODIyNzM4IC8qIFdlYlZpZXdDYW5QYXN0ZVVSTC5t
bSAqLywKIAkJCQkzN0UzOEMzMzE2OUI3RDAxMDA4NEMyOEMgLyogV2ViVmlld0RpZFJlbW92ZUZy
YW1lRnJvbUhpZXJhcmNoeS5tbSAqLywKIAkJCQlBNUUyMDI3MjE1QjIxODE5MDBDMTNFMTQgLyog
V2luZG93bGVzc1dlYlZpZXdXaXRoTWVkaWEubW0gKi8sCisJCQkJQzJFQjJERDExNkNBQzdBQzAw
OUI1MkVFIC8qIFdlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbSAqLywKIAkJCSk7
CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyNCw2ICs4
MzMsOCBAQAogCQlDMDdFNkNCMDEzRkQ3MzdDMDAzOEIyMkIgLyogUmVzb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDMkNGOTc1ODE2Q0VDNjlF
MDA1NEU5OUQgLyogSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTEuaHRtbCAqLywKKwkJCQlDMkNG
OTc1OTE2Q0VDNjlFMDA1NEU5OUQgLyogSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTIuaHRtbCAq
LywKIAkJCQkzNzkwMjhCODE0RkFCRTQ5MDA3RTZCNDMgLyogYWNjZXB0c0ZpcnN0TW91c2UuaHRt
bCAqLywKIAkJCQlCNTVGMTFCOTE1MTkxNkU2MDA5MTU5MTYgLyogQWhlbS50dGYgKi8sCiAJCQkJ
QjU1RjExQjAxNTE3QTJDNDAwOTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0
bWwgKi8sCkBAIC05MzMsNiArOTQ0LDggQEAKIC8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAq
LwogCQkwOEZCNzc5M0ZFODQxNTVEQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhQcm9qZWN0OworCQkJYXR0cmlidXRlcyA9IHsKKwkJCX07CiAJCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gMURFQjkyNzgwODczM0RENDAwMTBFOUNEIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiVGVzdFdlYktpdEFQSSIgKi87CiAJCQljb21w
YXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOwogCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBF
bmdsaXNoOwpAQCAtMTAwOCw2ICsxMDIxLDcgQEAKIAkJCQk0QkZERkZBOTEzMTQ3Nzc3MDA2MUYy
NEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUI0
RjhGQTQxNTlENTJCMTAwMkQ5Rjk0IC8qIEhUTUxDb2xsZWN0aW9uTmFtZWRJdGVtLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJOUIyNkZDNkMxNTlEMDYxMDAwQ0MzNzY1IC8qIEhUTUxGb3JtQ29sbGVj
dGlvbk5hbWVkSXRlbS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUMyRUIyREQzMTZDQUM3QUMwMDlC
NTJFRSAvKiBXZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQzU3NUFBRDEyNkU4M0I5MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVCYXNpYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzhFNjQ3MzE2MzI2NDZEMDBCNkM2NzYgLyogSW5qZWN0
ZWRCdW5kbGVGcmFtZUhpdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjY2MEFBMTMxNUE2
MTlDOTAwM0ExMjQzIC8qIEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxi
YWNrV2lucy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvbWFjL0pTQ29udGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTEuaHRt
bAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0pTQ29udGV4
dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAor
PGJvZHk+CisgICAgPGRpdiBpZD0idGVzdC1kaXYiPjwvZGl2PgorICAgIDxzY3JpcHQ+CisgICAg
ICAgIHZhciB0ZXN0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QtZGl2Iik7Cisg
ICAgICAgIGlmICghdGVzdERpdi5teUN1c3RvbVByb3BlcnR5KQorICAgICAgICAgICAgaW5zZXJ0
TXlDdXN0b21Qcm9wZXJ0eSh0ZXN0RGl2KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2hl
Y2tGb3JNeUN1c3RvbVByb3BlcnR5KHRlc3REaXYpOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvSlNDb250ZXh0QmFja0ZvcndhcmRD
YWNoZTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9K
U0NvbnRleHRCYWNrRm9yd2FyZENhY2hlMi5odG1sCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9tYWMvSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTIuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0LWRp
diI+PC9kaXY+CisgICAgPHNjcmlwdD4KKyAgICAgICAgdmFyIHRlc3REaXYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidGVzdC1kaXYiKTsKKyAgICAgICAgaWYgKHRlc3REaXYubXlDdXN0b21Q
cm9wZXJ0eSkKKyAgICAgICAgICAgIG15Q29uc29sZS5sb2coIkVSUk9SOiBmb3VuZCBteUN1c3Rv
bVByb3BlcnR5LiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkaWRDb21wbGV0ZVRlc3RT
dWNjZXNzZnVsbHkoKTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvbWFjL1dlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3RGlkQ3Jl
YXRlSmF2YVNjcmlwdENvbnRleHQubW0JKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL21hYy9XZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU0V4cG9ydC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJLaXQvV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitAY2xhc3MgTXlDb25z
b2xlOworCitzdGF0aWMgYm9vbCBkaWRGaW5pc2hMb2FkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aWRDb21wbGV0ZVRlc3RTdWNjZXNzZnVsbHkgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpZENhbGxX
aW5kb3dDYWxsYmFjayA9IGZhbHNlOworc3RhdGljIGJvb2wgZGlkRmluZE15Q3VzdG9tUHJvcGVy
dHkgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpZEluc2VydE15Q3VzdG9tUHJvcGVydHkgPSB0cnVl
OworCitAcHJvdG9jb2wgTXlDb25zb2xlPEpTRXhwb3J0PgorLSAodm9pZClsb2c6KE5TU3RyaW5n
ICopczsKKy0gKHZvaWQpcHJpbnRIZWxsb1dvcmxkOworLSAoaW50KWFkZDooaW50KWEgdG86KGlu
dCliOworQGVuZAorCitAaW50ZXJmYWNlIE15Q29uc29sZSA6IE5TT2JqZWN0PE15Q29uc29sZT4K
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIE15Q29uc29sZQorLSAodm9pZClsb2c6KE5TU3RyaW5n
ICopcworeworICAgIE5TTG9nKEAiJUAiLCBzKTsKK30KKworLSAodm9pZClwcmludEhlbGxvV29y
bGQKK3sKKyAgICBOU0xvZyhAIkhlbGxvLCBXb3JsZCEiKTsKK30KKworLSAoaW50KWFkZDooaW50
KWEgdG86KGludCliCit7CisgICAgcmV0dXJuIGEgKyBiOworfQorQGVuZAorCitAaW50ZXJmYWNl
IERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGUgOiBOU09iamVjdAor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRGcmFtZUxv
YWREZWxlZ2F0ZQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkRmluaXNo
TG9hZEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgZGlkRmluaXNoTG9hZCA9IHRy
dWU7Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkQ3JlYXRlSmF2
YVNjcmlwdENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZm9yRnJhbWU6KFdlYkZyYW1lICop
ZnJhbWUKK3sKKyAgICBNeUNvbnNvbGUgKm15Q29uc29sZSA9IFtbTXlDb25zb2xlIGFsbG9jXSBp
bml0XTsKKyAgICBjb250ZXh0W0AibXlDb25zb2xlIl0gPSBteUNvbnNvbGU7CisgICAgY29udGV4
dC5leGNlcHRpb25IYW5kbGVyID0gbmlsOworICAgIFtteUNvbnNvbGUgcmVsZWFzZV07CisKKyAg
ICBjb250ZXh0W0Aid2luZG93Q2FsbGJhY2siXSA9IF4oSlNWYWx1ZSAqdGhpc09iamVjdCl7Cisg
ICAgICAgIE5TTG9nKEAidGhpcyBvYmplY3QgPSAlcCIsIHRoaXNPYmplY3QpOworICAgICAgICBk
aWRDYWxsV2luZG93Q2FsbGJhY2sgPSB0cnVlOworICAgIH07CisKKyAgICBjb250ZXh0W0AiZGlk
Q29tcGxldGVUZXN0U3VjY2Vzc2Z1bGx5Il0gPSBeeworICAgICAgICBkaWRDb21wbGV0ZVRlc3RT
dWNjZXNzZnVsbHkgPSB0cnVlOworICAgIH07CisKKyAgICBjb250ZXh0W0AiY2FsbE1lQmFjayJd
ID0gXihKU1ZhbHVlICpmdW5jdGlvblZhbHVlKSB7CisgICAgICAgIFtmdW5jdGlvblZhbHVlIGNh
bGxXaXRoQXJndW1lbnRzOltOU0FycmF5IGFycmF5XV07CisgICAgfTsKKworICAgIGNvbnRleHRb
QCJjaGVja0Zvck15Q3VzdG9tUHJvcGVydHkiXSA9IF4oSlNWYWx1ZSAqZWxlbWVudCkgeworICAg
ICAgICBpZiAoW2VsZW1lbnQgaGFzUHJvcGVydHk6QCJteUN1c3RvbVByb3BlcnR5Il0gJiYgW1tl
bGVtZW50IHZhbHVlRm9yUHJvcGVydHk6QCJteUN1c3RvbVByb3BlcnR5Il0gdG9JbnQzMl0gPT0g
NDIpCisgICAgICAgICAgICBkaWRGaW5kTXlDdXN0b21Qcm9wZXJ0eSA9IHRydWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIE5TTG9nKEAiRVJST1I6IERpZCBub3QgZmluZCBteUN1c3RvbVBy
b3BlcnR5LiIpOworICAgIH07CisKKyAgICBfX2Jsb2NrIEpTQ29udGV4dCAqdGVtcENvbnRleHQg
PSBjb250ZXh0OworICAgIGNvbnRleHRbQCJpbnNlcnRNeUN1c3RvbVByb3BlcnR5Il0gPSBeKEpT
VmFsdWUgKmVsZW1lbnQpIHsKKyAgICAgICAgSlNWYWx1ZSAqZm9ydHlUd28gPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhJbnQzMjo0MiBpbkNvbnRleHQ6dGVtcENvbnRleHRdOworICAgICAgICBbZWxlbWVu
dCBzZXRWYWx1ZTpmb3J0eVR3byBmb3JQcm9wZXJ0eTpAIm15Q3VzdG9tUHJvcGVydHkiXTsKKyAg
ICAgICAgZGlkSW5zZXJ0TXlDdXN0b21Qcm9wZXJ0eSA9IHRydWU7CisgICAgfTsKK30KKworQGVu
ZAorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoV2ViS2l0MSwgRGlkQ3JlYXRl
SmF2YVNjcmlwdENvbnRleHRTYW5pdHkxKQoreworICAgIGRpZEZpbmlzaExvYWQgPSBmYWxzZTsK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgUmV0YWluUHRyPFdlYlZpZXc+IHdlYlZp
ZXcgPSBhZG9wdE5TKFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDEyMCwgMjAwKSBmcmFtZU5hbWU6bmlsIGdyb3VwTmFtZTpuaWxdKTsKKyAgICAgICAgUmV0
YWluUHRyPERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGU+IGZyYW1l
TG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0RpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVM
b2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAgICAgICB3ZWJWaWV3LmdldCgpLmZyYW1l
TG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGUuZ2V0KCk7CisgICAgICAgIFdlYkZyYW1l
ICptYWluRnJhbWUgPSB3ZWJWaWV3LmdldCgpLm1haW5GcmFtZTsKKworICAgICAgICBOU1N0cmlu
ZyAqYm9keVN0cmluZyA9IAorICAgICAgICAgICAgQCI8Ym9keT4gXAorICAgICAgICAgICAgICAg
IDxzY3JpcHQ+IFwKKyAgICAgICAgICAgICAgICAgICAgbXlDb25zb2xlLnByaW50SGVsbG9Xb3Js
ZCgpOyBcCisgICAgICAgICAgICAgICAgICAgIG15Q29uc29sZS5sb2coXCJMb2FkZWQgY3VzdG9t
IHN0dWZmLlwiKTsgXAorICAgICAgICAgICAgICAgICAgICBteUNvbnNvbGUubG9nKG15Q29uc29s
ZS5hZGRUbyg0MCwgMikpOyBcCisgICAgICAgICAgICAgICAgICAgIGRpZENvbXBsZXRlVGVzdFN1
Y2Nlc3NmdWxseSgpOyBcCisgICAgICAgICAgICAgICAgPC9zY3JpcHQ+IFwKKyAgICAgICAgICAg
IDwvYm9keT4iOworICAgICAgICBOU1VSTCAqYWJvdXRCbGFua1VSTCA9IFtOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiYWJvdXQ6YmxhbmsiXTsKKworICAgICAgICBbbWFpbkZyYW1lIGxvYWRIVE1MU3Ry
aW5nOmJvZHlTdHJpbmcgYmFzZVVSTDphYm91dEJsYW5rVVJMXTsKKyAgICAgICAgVXRpbDo6cnVu
KCZkaWRDb21wbGV0ZVRlc3RTdWNjZXNzZnVsbHkpOworICAgIH0KK30KKworVEVTVChXZWJLaXQx
LCBEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dFNhbml0eTIpCit7CisgICAgZGlkQ2FsbFdpbmRv
d0NhbGxiYWNrID0gZmFsc2U7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFJldGFp
blB0cjxXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAxMjAsIDIwMCkgZnJhbWVOYW1lOm5pbCBncm91cE5hbWU6
bmlsXSk7CisgICAgICAgIFJldGFpblB0cjxEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dEZyYW1l
TG9hZERlbGVnYXRlPiBmcmFtZUxvYWREZWxlZ2F0ZSA9IGFkb3B0TlMoW1tEaWRDcmVhdGVKYXZh
U2NyaXB0Q29udGV4dEZyYW1lTG9hZERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisKKyAgICAgICAg
d2ViVmlldy5nZXQoKS5mcmFtZUxvYWREZWxlZ2F0ZSA9IGZyYW1lTG9hZERlbGVnYXRlLmdldCgp
OworICAgICAgICBXZWJGcmFtZSAqbWFpbkZyYW1lID0gd2ViVmlldy5nZXQoKS5tYWluRnJhbWU7
CisKKyAgICAgICAgTlNTdHJpbmcgKmJvZHlTdHJpbmcgPSAKKyAgICAgICAgICAgIEAiPGJvZHk+
IFwKKyAgICAgICAgICAgICAgICA8c2NyaXB0PiBcCisgICAgICAgICAgICAgICAgICAgIHNldFRp
bWVvdXQod2luZG93Q2FsbGJhY2ssIDEwMCk7IFwKKyAgICAgICAgICAgICAgICA8L3NjcmlwdD4g
XAorICAgICAgICAgICAgPC9ib2R5PiI7CisgICAgICAgIE5TVVJMICphYm91dEJsYW5rVVJMID0g
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdOworCisgICAgICAgIFttYWluRnJh
bWUgbG9hZEhUTUxTdHJpbmc6Ym9keVN0cmluZyBiYXNlVVJMOmFib3V0QmxhbmtVUkxdOworICAg
ICAgICBVdGlsOjpydW4oJmRpZENhbGxXaW5kb3dDYWxsYmFjayk7CisgICAgfQorfQorCitURVNU
KFdlYktpdDEsIERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0Q2FsbEpTRnVuY3Rpb25Gcm9tT2Jq
Q0NhbGxiYWNrVGVzdCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgUmV0YWlu
UHRyPFdlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDEyMCwgMjAwKSBmcmFtZU5hbWU6bmlsIGdyb3VwTmFtZTpu
aWxdKTsKKyAgICAgICAgUmV0YWluUHRyPERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVM
b2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0RpZENyZWF0ZUphdmFT
Y3JpcHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAgICAgICB3
ZWJWaWV3LmdldCgpLmZyYW1lTG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGUuZ2V0KCk7
CisgICAgICAgIFdlYkZyYW1lICptYWluRnJhbWUgPSB3ZWJWaWV3LmdldCgpLm1haW5GcmFtZTsK
KworICAgICAgICBOU1N0cmluZyAqYm9keVN0cmluZyA9IAorICAgICAgICAgICAgQCI8Ym9keT4g
XAorICAgICAgICAgICAgICAgIDxzY3JpcHQ+IFwKKyAgICAgICAgICAgICAgICAgICAgY2FsbE1l
QmFjayhmdW5jdGlvbigpIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgZGlkQ29tcGxldGVU
ZXN0U3VjY2Vzc2Z1bGx5KCk7IFwKKyAgICAgICAgICAgICAgICAgICAgfSk7IFwKKyAgICAgICAg
ICAgICAgICA8L3NjcmlwdD4gXAorICAgICAgICAgICAgPC9ib2R5PiI7CisgICAgICAgIE5TVVJM
ICphYm91dEJsYW5rVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdOwor
CisgICAgICAgIFttYWluRnJhbWUgbG9hZEhUTUxTdHJpbmc6Ym9keVN0cmluZyBiYXNlVVJMOmFi
b3V0QmxhbmtVUkxdOworICAgICAgICBVdGlsOjpydW4oJmRpZENvbXBsZXRlVGVzdFN1Y2Nlc3Nm
dWxseSk7CisgICAgfQorfQorCitURVNUKFdlYktpdDEsIERpZENyZWF0ZUphdmFTY3JpcHRDb250
ZXh0QWRkQ3VzdG9tUHJvcGVydGllc0Zyb21KU1Rlc3QpCit7CisgICAgZGlkRmluZE15Q3VzdG9t
UHJvcGVydHkgPSBmYWxzZTsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgUmV0YWlu
UHRyPFdlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDEyMCwgMjAwKSBmcmFtZU5hbWU6bmlsIGdyb3VwTmFtZTpu
aWxdKTsKKyAgICAgICAgUmV0YWluUHRyPERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVM
b2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0RpZENyZWF0ZUphdmFT
Y3JpcHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAgICAgICB3
ZWJWaWV3LmdldCgpLmZyYW1lTG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGUuZ2V0KCk7
CisgICAgICAgIFdlYkZyYW1lICptYWluRnJhbWUgPSB3ZWJWaWV3LmdldCgpLm1haW5GcmFtZTsK
KworICAgICAgICBOU1N0cmluZyAqYm9keVN0cmluZyA9IAorICAgICAgICBAIjxib2R5PiBcCisg
ICAgICAgICAgICA8ZGl2IGlkPVwidGVzdC1kaXZcIj48L2Rpdj4gXAorICAgICAgICAgICAgPHNj
cmlwdD4gXAorICAgICAgICAgICAgICAgIHZhciB0ZXN0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoXCJ0ZXN0LWRpdlwiKTsgXAorICAgICAgICAgICAgICAgIHRlc3REaXYubXlDdXN0b21Q
cm9wZXJ0eSA9IDQyOyBcCisgICAgICAgICAgICAgICAgY2hlY2tGb3JNeUN1c3RvbVByb3BlcnR5
KHRlc3REaXYpOyBcCisgICAgICAgICAgICA8L3NjcmlwdD4gXAorICAgICAgICA8L2JvZHk+IjsK
KyAgICAgICAgTlNVUkwgKmFib3V0QmxhbmtVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFi
b3V0OmJsYW5rIl07CisKKyAgICAgICAgW21haW5GcmFtZSBsb2FkSFRNTFN0cmluZzpib2R5U3Ry
aW5nIGJhc2VVUkw6YWJvdXRCbGFua1VSTF07CisgICAgICAgIFV0aWw6OnJ1bigmZGlkRmluZE15
Q3VzdG9tUHJvcGVydHkpOworICAgIH0KK30KKworVEVTVChXZWJLaXQxLCBEaWRDcmVhdGVKYXZh
U2NyaXB0Q29udGV4dEFkZEN1c3RvbVByb3BlcnRpZXNGcm9tT2JqQ1Rlc3QpCit7CisgICAgZGlk
RmluZE15Q3VzdG9tUHJvcGVydHkgPSBmYWxzZTsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAg
ICAgICAgUmV0YWluUHRyPFdlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDEyMCwgMjAwKSBmcmFtZU5hbWU6bmls
IGdyb3VwTmFtZTpuaWxdKTsKKyAgICAgICAgUmV0YWluUHRyPERpZENyZWF0ZUphdmFTY3JpcHRD
b250ZXh0RnJhbWVMb2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0Rp
ZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KworICAgICAgICB3ZWJWaWV3LmdldCgpLmZyYW1lTG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVs
ZWdhdGUuZ2V0KCk7CisgICAgICAgIFdlYkZyYW1lICptYWluRnJhbWUgPSB3ZWJWaWV3LmdldCgp
Lm1haW5GcmFtZTsKKworICAgICAgICBOU1N0cmluZyAqYm9keVN0cmluZyA9IAorICAgICAgICAg
ICAgQCI8Ym9keT4gXAorICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXN0LWRpdlwiPjwvZGl2
PiBcCisgICAgICAgICAgICAgICAgPHNjcmlwdD4gXAorICAgICAgICAgICAgICAgICAgICB2YXIg
dGVzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdC1kaXZcIik7IFwKKyAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0TXlDdXN0b21Qcm9wZXJ0eSh0ZXN0RGl2KTsgXAorICAgICAg
ICAgICAgICAgICAgICBpZiAodGVzdERpdi5teUN1c3RvbVByb3BlcnR5ID09PSA0MikgeyBcCisg
ICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvck15Q3VzdG9tUHJvcGVydHkodGVzdERpdik7
IFwKKyAgICAgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgPC9zY3JpcHQ+IFwK
KyAgICAgICAgICAgIDwvYm9keT4iOworICAgICAgICBOU1VSTCAqYWJvdXRCbGFua1VSTCA9IFtO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiYWJvdXQ6YmxhbmsiXTsKKworICAgICAgICBbbWFpbkZyYW1l
IGxvYWRIVE1MU3RyaW5nOmJvZHlTdHJpbmcgYmFzZVVSTDphYm91dEJsYW5rVVJMXTsKKyAgICAg
ICAgVXRpbDo6cnVuKCZkaWRGaW5kTXlDdXN0b21Qcm9wZXJ0eSk7CisgICAgfQorfQorCitURVNU
KFdlYktpdDEsIERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0QmFja0ZvcndhcmRDYWNoZVRlc3Qp
Cit7CisgICAgZGlkSW5zZXJ0TXlDdXN0b21Qcm9wZXJ0eSA9IGZhbHNlOworICAgIGRpZEZpbmRN
eUN1c3RvbVByb3BlcnR5ID0gZmFsc2U7CisgICAgZGlkQ29tcGxldGVUZXN0U3VjY2Vzc2Z1bGx5
ID0gZmFsc2U7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFJldGFpblB0cjxXZWJW
aWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCAxMjAsIDIwMCkgZnJhbWVOYW1lOm5pbCBncm91cE5hbWU6bmlsXSk7Cisg
ICAgICAgIFJldGFpblB0cjxEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dEZyYW1lTG9hZERlbGVn
YXRlPiBmcmFtZUxvYWREZWxlZ2F0ZSA9IGFkb3B0TlMoW1tEaWRDcmVhdGVKYXZhU2NyaXB0Q29u
dGV4dEZyYW1lTG9hZERlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisKKyAgICAgICAgd2ViVmlldy5n
ZXQoKS5mcmFtZUxvYWREZWxlZ2F0ZSA9IGZyYW1lTG9hZERlbGVnYXRlLmdldCgpOworICAgICAg
ICBXZWJGcmFtZSAqbWFpbkZyYW1lID0gd2ViVmlldy5nZXQoKS5tYWluRnJhbWU7CisKKyAgICAg
ICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
SlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTEiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdpdGhFeHRlbnNpb246QCJodG1sIiAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktp
dEFQSS5yZXNvdXJjZXMiXTsKKyAgICAgICAgW21haW5GcmFtZSBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnVybDFdXTsKKyAgICAgICAgVXRpbDo6cnVuKCZkaWRJbnNl
cnRNeUN1c3RvbVByb3BlcnR5KTsKKworICAgICAgICBOU1VSTCAqdXJsMiA9IFtbTlNCdW5kbGUg
bWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJKU0NvbnRleHRCYWNrRm9yd2FyZENhY2hlMiIg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEV4dGVu
c2lvbjpAImh0bWwiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgICAgICBb
bWFpbkZyYW1lIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dXJsMl1d
OworICAgICAgICBVdGlsOjpydW4oJmRpZENvbXBsZXRlVGVzdFN1Y2Nlc3NmdWxseSk7CisKKyAg
ICAgICAgZGlkQ29tcGxldGVUZXN0U3VjY2Vzc2Z1bGx5ID0gZmFsc2U7CisgICAgICAgIFtbbWFp
bkZyYW1lIGphdmFTY3JpcHRDb250ZXh0XSBldmFsdWF0ZVNjcmlwdDoKKyAgICAgICAgICAgIEAi
dmFyIHRlc3REaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRlc3QtZGl2XCIpOyBcCisg
ICAgICAgICAgICBpZiAoIXRlc3REaXYubXlDdXN0b21Qcm9wZXJ0eSkgeyBcCisgICAgICAgICAg
ICAgICAgZGlkQ29tcGxldGVUZXN0U3VjY2Vzc2Z1bGx5KCk7IFwKKyAgICAgICAgICAgIH0iXTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoZGlkQ29tcGxldGVUZXN0U3VjY2Vzc2Z1bGx5KTsKKworICAg
ICAgICBpZiAoW3dlYlZpZXcuZ2V0KCkgZ29CYWNrXSkgeworICAgICAgICAgICAgW1ttYWluRnJh
bWUgamF2YVNjcmlwdENvbnRleHRdIGV2YWx1YXRlU2NyaXB0OgorICAgICAgICAgICAgICAgIEAi
dmFyIHRlc3REaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRlc3QtZGl2XCIpOyBcCisg
ICAgICAgICAgICAgICAgY2hlY2tGb3JNeUN1c3RvbVByb3BlcnR5KHRlc3REaXYpOyJdOworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoZGlkRmluZE15Q3VzdG9tUHJvcGVydHkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGZhbHNlKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIEVOQUJMRShKU0NfT0JKQ19BUEkp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189378</attachid>
            <date>2013-02-20 14:25:13 -0800</date>
            <delta_ts>2013-02-21 09:19:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106059-20130220142135.patch</filename>
            <type>text/plain</type>
            <size>90693</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzNTAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDEzLTAyLTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgd2F5IHRvIHVzZSB0aGUgT2JqZWN0aXZl
LUMgSmF2YVNjcmlwdCBBUEkgd2l0aCBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgKiBBUEkvSlNCYXNlLmg6IFJlbmFtZWQgZW5h
YmxlIGZsYWcgZm9yIEFQSS4KKyAgICAgICAgKiBBUEkvSlNCbG9ja0FkYXB0b3IuaDogVXNpbmcg
bmV3IGZsYWcuCisgICAgICAgICogQVBJL0pTQmxvY2tBZGFwdG9yLm1tOiBEaXR0by4KKyAgICAg
ICAgKiBBUEkvSlNDb250ZXh0Lmg6IEFkZCBjb252ZW5pZW5jZSBDIEFQSSBjb252ZXJzaW9uIGZ1
bmN0aW9uIGZvciBKU0dsb2JhbENvbnRleHRSZWYuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5t
bTogCisgICAgICAgICgtW0pTQ29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTogSW1wbGVtZW50
YXRpb24gb2YgQyBBUEkgY29udmVuaWVuY2UgZnVuY3Rpb24uCisgICAgICAgICgtW0pTQ29udGV4
dCBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOl0pOiBXZSBkb24ndCB1c2UgdGhlIG1fYXBpRGF0YSBm
aWVsZCBhbnkgbW9yZS4KKyAgICAgICAgKC1bSlNDb250ZXh0IGluaXRXaXRoR2xvYmFsQ29udGV4
dFJlZjpdKTogaW5pdCBtZXRob2QgZm9yIGFsbG9jYXRpbmcgbmV3IEpTQ29udGV4dHMgZ2l2ZW4g
YSBKU0dsb2JhbENvbnRleHRSZWYuCisgICAgICAgICgtW0pTQ29udGV4dCBkZWFsbG9jXSk6IE5v
IG1vcmUgbV9hcGlEYXRhLgorICAgICAgICAoLVtKU0NvbnRleHQgd3JhcHBlckZvck9iakNPYmpl
Y3Q6XSk6IFJlbmFtZWQgd3JhcHBlckZvck9iamVjdC4gCisgICAgICAgICgtW0pTQ29udGV4dCB3
cmFwcGVyRm9ySlNPYmplY3Q6XSk6IEZldGNoZXMgb3IgYWxsb2NhdGVzIHRoZSBKU1ZhbHVlIGZv
ciB0aGUgc3BlY2lmaWVkIEpTVmFsdWVSZWYgaW4gdGhpcyBKU0NvbnRleHQuCisgICAgICAgICgr
W0pTQ29udGV4dCBjb250ZXh0V2l0aEdsb2JhbENvbnRleHRSZWY6XSk6IEhlbHBlciBmdW5jdGlv
biB0byBncmFiIHRoZSBsaWdodHdlaWdodCBKU0NvbnRleHQgd3JhcHBlciBmb3IgYSBnaXZlbgor
ICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYgZnJvbSB0aGUgZ2xvYmFsIHdyYXBwZXIgY2FjaGUg
b3IgYWxsb2NhdGUgYSBuZXcgb25lIGlmIHRoZXJlIGlzbid0IGFscmVhZHkgb25lLgorICAgICAg
ICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOiBOZXcgZmxhZywgbmV3IG1ldGhvZCBkZWNsYXJh
dGlvbiBmb3IgaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmLgorICAgICAgICAqIEFQSS9KU0V4cG9y
dC5oOiBOZXcgZmxhZy4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZS5oOiBOZXcgZmxhZyBhbmQgbmV3
IEMgQVBJIGNvbnZlbmllbmNlIG1ldGhvZC4KKyAgICAgICAgKiBBUEkvSlNWYWx1ZS5tbToKKyAg
ICAgICAgKC1bSlNWYWx1ZSBKU1ZhbHVlUmVmXSk6IEltcGxlbWVudGF0aW9uIG9mIHRoZSBDIEFQ
SSBjb252ZW5pZW5jZSBtZXRob2QuCisgICAgICAgIChvYmplY3RUb1ZhbHVlV2l0aG91dENvcHkp
OgorICAgICAgICAoK1tKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmluQ29udGV4dDpdKTogV2Ugbm93
IGFzayB0aGUgSlNDb250ZXh0IGZvciBhbiBPYmplY3RpdmUtQyBKU1ZhbHVlIHdyYXBwZXIsIHdo
aWNoIGl0IGNhbiBjYWNoZQorICAgICAgICBpbiBpdHMgaW50ZXJuYWwgSlNXcmFwcGVyTWFwLgor
ICAgICAgICAqIEFQSS9KU1ZhbHVlSW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFs
TWFjaGluZS5oOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOiBBZGRlZCBnbG9i
YWwgY2FjaGUgdGhhdCBtYXBzIEpTQ29udGV4dEdyb3VwUmVmIC0+IEpTVmlydHVhbE1hY2hpbmUg
bGlnaHR3ZWlnaHQgd3JhcHBlcnMuCisgICAgICAgICh3cmFwcGVyQ2FjaGVMb2NrKToKKyAgICAg
ICAgKGluaXRXcmFwcGVyQ2FjaGUpOgorICAgICAgICAoK1tKU1ZNV3JhcHBlckNhY2hlIGFkZFdy
YXBwZXI6Zm9ySlNDb250ZXh0R3JvdXBSZWY6XSk6CisgICAgICAgICgrW0pTVk1XcmFwcGVyQ2Fj
aGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxN
YWNoaW5lIGluaXRdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBpbml0V2l0aENvbnRl
eHRHcm91cFJlZjpdKToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBkZWFsbG9jXSk6Cisg
ICAgICAgICgrW0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3Vw
UmVmOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGNvbnRleHRGb3JHbG9iYWxDb250
ZXh0UmVmOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGFkZENvbnRleHQ6Zm9yR2xv
YmFsQ29udGV4dFJlZjpdKToKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
Lmg6CisgICAgICAgICogQVBJL0pTV3JhcHBlck1hcC5oOgorICAgICAgICAqIEFQSS9KU1dyYXBw
ZXJNYXAubW06CisgICAgICAgICgtW0pTT2JqQ0NsYXNzSW5mbyBhbGxvY2F0ZUNvbnN0cnVjdG9y
QW5kUHJvdG90eXBlV2l0aFN1cGVyQ2xhc3NJbmZvOl0pOiBXZSB1c2UgdGhlIEpTT2JqZWN0U2V0
UHJvdG90eXBlIEMgQVBJIGNhbGwgYmVjYXVzZSAKKyAgICAgICAgc2V0dGluZyB0aGUgX19wcm90
b19fIHByb3BlcnR5IGNhdXNlcyBhbGwgc29ydHMgb2YgYmFkIHRoaW5ncyB0byBoYXBwZW4gYmVo
aW5kIHRoZSBzY2VuZXMsIHdoaWNoIGNhbiBjYXVzZSBjcmFzaGVzIGJhc2VkIG9uIAorICAgICAg
ICB3aGVuIGl0IGdldHMgY2FsbGVkLgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAgaW5pdFdpdGhD
b250ZXh0Ol0pOgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAganNXcmFwcGVyRm9yT2JqZWN0Ol0p
OgorICAgICAgICAoLVtKU1dyYXBwZXJNYXAgb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOl0pOgor
ICAgICAgICAqIEFQSS9KYXZhU2NyaXB0Q29yZS5oOgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJh
Y2tGdW5jdGlvbi5oOgorICAgICAgICAqIEFQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbToKKyAg
ICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uOjpPYmpDQ2FsbGJhY2tGdW5jdGlvbik6IFdlIG5l
dmVyIGFjdHVhbGx5IHNob3VsZCBoYXZlIHJldGFpbmVkIHRoZSB0YXJnZXQgaW4gdGhlIGNhc2Ug
dGhhdCB3ZSBoYWQgYSAKKyAgICAgICAgYmxvY2sgYXMgYSBjYWxsYmFjay4gQmxvY2tzIGFyZSBp
bml0aWFsbHkgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgYXJlIG9ubHkgbW92ZWQgdG8gdGhl
IGhlYXAgaWYgd2UgY2FsbCB0aGVpciBjb3B5IG1ldGhvZC4KKyAgICAgICAgUmV0YWluaW5nIHRo
ZSBibG9jayBvbiB0aGUgc3RhY2sgd2FzIGEgYmFkIGlkZWEgYmVjYXVzZSBpZiB0aGF0IHN0YWNr
IGZyYW1lIGV2ZXIgd2VudCBhd2F5IGFuZCB3ZSBjYWxsZWQgdGhlIGJsb2NrIGxhdGVyLCAKKyAg
ICAgICAgd2UnZCBjcmFzaCBhbmQgYnVybi4KKyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9u
OjpzZXRDb250ZXh0KTogV2UgbmVlZCBhIG5ldyBzZXR0ZXIgZm9yIHdoZW4gdGhlIHdlYWsgcmVm
ZXJlbmNlIHRvIGEgSlNDb250ZXh0IGluc2lkZSBhbiBPYmpDQ2FsbGJhY2tGdW5jdGlvbgorICAg
ICAgICBkaXNhcHBlYXJzLCB3ZSBjYW4gYWxsb2NhdGUgYSBuZXcgb25lIGluIGl0cyBwbGFjZS4K
KyAgICAgICAgKE9iakNDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKG9iakNDYWxsYmFja0Z1
bmN0aW9uQ2FsbEFzRnVuY3Rpb24pOiBSZXNldCB0aGUgY2FsbGJhY2sncyBjb250ZXh0IGlmIGl0
J3MgZXZlciBkZXN0cm95ZWQuCisgICAgICAgIChvYmpDQ2FsbGJhY2tGdW5jdGlvbkZvckludm9j
YXRpb24pOiBBZ2FpbiwgZG9uJ3Qgc2V0IHRoZSBfX3Byb3RvX18gcHJvcGVydHkgYmVjYXVzZSBp
dCB1c2VzIGJsYWNrIG1hZ2ljIHRoYXQgY2FuIGNhdXNlIHVzIHRvIGNyYXNoCisgICAgICAgIGRl
cGVuZGluZyBvbiB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICAgICAgICAob2JqQ0NhbGxiYWNrRnVu
Y3Rpb25Gb3JCbG9jayk6IEhlcmUgaXMgd2hlcmUgd2UgY29weSB0aGUgYmxvY2sgdG8gdGhlIGhl
YXAgd2hlbiB3ZSdyZSBmaXJzdCBjcmVhdGluZyB0aGUgY2FsbGJhY2sgb2JqZWN0IGZvciBpdC4K
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5jOgorICAgICAgICAobWFpbik6CisgICAgICAg
ICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06IFdlJ3JlIGdvaW5nIHRvIGdldCByaWQgb2YgdGhlIGF1
dG9tYXRpYyBibG9jayBjb252ZXJzaW9uLCBzaW5jZSB0aGF0IGlzIGNhdXNpbmcgbGVha3MuIEkg
Y2hhbmdlZCBpdCAKKyAgICAgICAgaGVyZSBpbiB0aGlzIHRlc3QganVzdCBzbyB0aGF0IGl0IHdv
dWxkbid0IG1hc2sgYW55IG90aGVyIHBvdGVudGlhbCBsZWFrcy4gQWxzbyBtb2RpZmllZCBzb21l
IG9mIHRoZSB0ZXN0cyBzaW5jZSBKU0NvbnRleHRzIGFyZSAKKyAgICAgICAganVzdCBsaWdodHdl
aWdodCB3cmFwcGVycyBub3csIHdlJ3JlIG5vdCBndWFyYW50ZWVkIHRvIGdldCB0aGUgc2FtZSBw
b2ludGVyIGJhY2sgZnJvbSB0aGUgY2FsbCB0byBbSlNWYWx1ZSBjb250ZXh0XSBhcyB0aGUgb25l
IAorICAgICAgICB0aGF0IHRoZSB2YWx1ZSB3YXMgY3JlYXRlZCBpbi4KKyAgICAgICAgKC1bVGVz
dE9iamVjdCBjYWxsYmFjazpdKToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOiBObyBtb3JlIG1fYXBpRGF0
YS4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOiBEaXR0by4KKyAgICAgICAgKiBy
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6
OkpTR2xvYmFsT2JqZWN0KTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oOgorCiAyMDEzLTAyLTE5ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgdW5pbnRlcmVzdGluZyBjaGFuZ2UgdG8gdGVzdCBhIHRoZW9yeSBhYm91
dCBiYWQgZGVwZW5kZW5jeSBoYW5kbGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jh
c2UuaAkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw4IEBAIEpTX0VYUE9SVCB2b2lkIEpT
R2FyYmFnZUNvbGxlY3QoSlNDb250ZXgKICNlbmRpZgogCiAvKiBFbmFibGUgdGhlIE9iamVjdGl2
ZS1DIEFQSSBmb3IgcGxhdGZvcm1zIHdpdGggYSBtb2Rlcm4gcnVudGltZS4gKi8KLSN1bmRlZiBK
U19PQkpDX0FQSV9FTkFCTEVECi0jZGVmaW5lIEpTX09CSkNfQVBJX0VOQUJMRUQgKGRlZmluZWQo
X19jbGFuZ19fKSAmJiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwOTAgJiYgIWRlZmluZWQoX19pMzg2X18pKQorI2lmICFkZWZpbmVkKEpTQ19PQkpDX0FQSV9F
TkFCTEVEKQorI2RlZmluZSBKU0NfT0JKQ19BUElfRU5BQkxFRCAoZGVmaW5lZChfX2NsYW5nX18p
ICYmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MCAmJiAh
ZGVmaW5lZChfX2kzODZfXykpCisjZW5kaWYKIAogI2VuZGlmIC8qIEpTQmFzZV9oICovCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5oCShyZXZpc2lvbiAx
NDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JK
Q19BUElfRU5BQkxFRAogCiBAaW50ZXJmYWNlIEpTQmxvY2tBZGFwdG9yIDogTlNPYmplY3QKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Jsb2NrQWRhcHRvci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9yLm1tCShyZXZp
c2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmxvY2tBZGFwdG9y
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgogCi0jaWYgSlNfT0JKQ19BUElfRU5BQkxFRAor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKICNpbXBvcnQg
IkFQSVNoaW1zLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJKHJl
dmlzaW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDkgKzIzLDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwog
CisjaWZuZGVmIEpTQ29udGV4dF9oCisjZGVmaW5lIEpTQ29udGV4dF9oCisKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg+CiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisj
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGNsYXNzIEpTVmlydHVhbE1hY2hpbmUsIEpTVmFs
dWU7CiAKQEAgLTQ5LDYgKzUyLDEwIEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCBOQSkKIC8v
IEV2YWx1YXRlIGEgc3RyaW5nIG9mIEphdmFTY3JpcHQgY29kZS4KIC0gKEpTVmFsdWUgKilldmFs
dWF0ZVNjcmlwdDooTlNTdHJpbmcgKilzY3JpcHQ7CiAKKy8vIFJldHVybiB0aGUgQyBBUEkgdmVy
c2lvbiBvZiB0aGlzIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGNvbnZlbmllbmNlCisv
LyBhdCB0aGUgYm91bmRhcmllcyB3aGVuIGNvbnZlcnRpbmcgY29kZSBmcm9tIHRoZSBDIEFQSSB0
byB0aGUgT2JqZWN0aXZlLUMgQVBJLgorLSAoSlNHbG9iYWxDb250ZXh0UmVmKUpTR2xvYmFsQ29u
dGV4dFJlZjsKKwogLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBnbG9iYWwgb2JqZWN0IG9m
IHRoZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgogLy8gSW5zdGFuY2VzIG9mIEpTQ29u
dGV4dCBvcmlnaW5hdGluZyBmcm9tIFdlYktpdCB3aWxsIHJldHVybiBhIHJlZmVyZW5jZSB0byB0
aGUKIC8vIFdpbmRvd1Byb3h5IG9iamVjdC4KQEAgLTExNCwzICsxMjEsNSBAQCBOU19DTEFTU19B
VkFJTEFCTEUoMTBfOSwgTkEpCiBAZW5kCiAKICNlbmRpZgorCisjZW5kaWYgLy8gSlNDb250ZXh0
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCShyZXZpc2lvbiAx
NDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogI2ltcG9ydCAiU3Ryb25nSW5saW5lcy5oIgogI2lt
cG9ydCA8d3RmL0hhc2hTZXQuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAogCiBAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0IHsKICAgICBKU1Zp
cnR1YWxNYWNoaW5lICptX3ZpcnR1YWxNYWNoaW5lOwpAQCAtNDgsNiArNDgsMTEgQEAKIAogQHN5
bnRoZXNpemUgZXhjZXB0aW9uSGFuZGxlcjsKIAorLSAoSlNHbG9iYWxDb250ZXh0UmVmKUpTR2xv
YmFsQ29udGV4dFJlZgoreworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKIC0gKGlkKWluaXQK
IHsKICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpbW1tKU1ZpcnR1YWxN
YWNoaW5lIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV1dOwpAQCAtNjcsNyArNzIsNiBAQCAtIChp
ZClpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNCiAgICAgICAgIGNvbnRleHQuZXhj
ZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CiAgICAgfTsKIAotICAgIHRvSlMobV9jb250ZXh0KS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tX2FwaURhdGEgPSBzZWxmOwogICAgIHJldHVybiBzZWxm
OwogfQogCkBAIC0xNjcsNiArMTcxLDI1IEBAIC0gKHZvaWQpc2V0T2JqZWN0OihpZClvYmplY3Qg
Zm9yS2V5ZWRTdWIKIAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dChJbnRlcm5hbCkKIAorLSAo
aWQpaW5pdFdpdGhHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpY29udGV4dAor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KUyhj
b250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIG1fdmlydHVhbE1hY2hpbmUgPSBb
W0pTVmlydHVhbE1hY2hpbmUgdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVm
KCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSldIHJldGFpbl07CisgICAgQVNTRVJUKG1fdmly
dHVhbE1hY2hpbmUpOworICAgIG1fY29udGV4dCA9IEpTR2xvYmFsQ29udGV4dFJldGFpbihjb250
ZXh0KTsKKyAgICBtX3dyYXBwZXJNYXAgPSBbW0pTV3JhcHBlck1hcCBhbGxvY10gaW5pdFdpdGhD
b250ZXh0OnNlbGZdOworCisgICAgc2VsZi5leGNlcHRpb25IYW5kbGVyID0gXihKU0NvbnRleHQg
KmNvbnRleHQsIEpTVmFsdWUgKmV4Y2VwdGlvblZhbHVlKSB7CisgICAgICAgIGNvbnRleHQuZXhj
ZXB0aW9uID0gZXhjZXB0aW9uVmFsdWU7CisgICAgfTsKKworICAgIHJldHVybiBzZWxmOworfQor
CiBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4dChKU0NvbnRleHQgKmNv
bnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fY29udGV4dDsKQEAgLTE3NCw3ICsxOTcs
NiBAQCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dEludGVybmFsQ29udGV4CiAKIC0gKHZvaWQp
ZGVhbGxvYwogewotICAgIHRvSlMobV9jb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5t
X2FwaURhdGEgPSAwOwogICAgIFttX3dyYXBwZXJNYXAgcmVsZWFzZV07CiAgICAgSlNHbG9iYWxD
b250ZXh0UmVsZWFzZShtX2NvbnRleHQpOwogICAgIFttX3ZpcnR1YWxNYWNoaW5lIHJlbGVhc2Vd
OwpAQCAtMjIwLDExICsyNDIsMjggQEAgLSAodm9pZCllbmRDYWxsYmFja1dpdGhEYXRhOihDYWxs
YmFja0RhdAogICAgIFtzZWxmIHJlbGVhc2VdOwogfQogCi0tIChKU1ZhbHVlICopd3JhcHBlckZv
ck9iamVjdDooaWQpb2JqZWN0CistIChKU1ZhbHVlICopd3JhcHBlckZvck9iakNPYmplY3Q6KGlk
KW9iamVjdAogewogICAgIC8vIExvY2sgYWNjZXNzIHRvIG1fd3JhcHBlck1hcAogICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2sodG9KUyhtX2NvbnRleHQpKTsKLSAgICByZXR1cm4gW21fd3JhcHBl
ck1hcCB3cmFwcGVyRm9yT2JqZWN0Om9iamVjdF07CisgICAgcmV0dXJuIFttX3dyYXBwZXJNYXAg
anNXcmFwcGVyRm9yT2JqZWN0Om9iamVjdF07Cit9CisKKy0gKEpTVmFsdWUgKil3cmFwcGVyRm9y
SlNPYmplY3Q6KEpTVmFsdWVSZWYpdmFsdWUKK3sKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KHRvSlMobV9jb250ZXh0KSk7CisgICAgcmV0dXJuIFttX3dyYXBwZXJNYXAgb2JqY1dyYXBwZXJG
b3JKU1ZhbHVlUmVmOnZhbHVlXTsKK30KKworKyAoSlNDb250ZXh0ICopY29udGV4dFdpdGhHbG9i
YWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dAoreworICAgIEpT
VmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVmlydHVhbE1hY2hpbmUgdmlydHVh
bE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ0b0pTKGdsb2JhbENvbnRleHQpLT5n
bG9iYWxEYXRhKCkpXTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbdmlydHVhbE1hY2hpbmUg
Y29udGV4dEZvckdsb2JhbENvbnRleHRSZWY6Z2xvYmFsQ29udGV4dF07CisgICAgaWYgKCFjb250
ZXh0KSB7CisgICAgICAgIGNvbnRleHQgPSBbW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoR2xv
YmFsQ29udGV4dFJlZjpnbG9iYWxDb250ZXh0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIFt2aXJ0
dWFsTWFjaGluZSBhZGRDb250ZXh0OmNvbnRleHQgZm9yR2xvYmFsQ29udGV4dFJlZjpnbG9iYWxD
b250ZXh0XTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKIEBlbmQKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgJKHJldmlzaW9u
IDE0MzQ3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCisjaWZuZGVmIEpTQ29udGV4dEludGVybmFsX2gKKyNkZWZpbmUgSlNDb250ZXh0SW50ZXJu
YWxfaAorCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgogCi0jaWYg
SlNfT0JKQ19BUElfRU5BQkxFRAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQg
IkpTQ29udGV4dC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CiAKIHN0
cnVjdCBDYWxsYmFja0RhdGEgewogICAgIENhbGxiYWNrRGF0YSAqbmV4dDsKQEAgLTU2LDcgKzU5
LDkgQEAgcHJpdmF0ZToKIAogQGludGVyZmFjZSBKU0NvbnRleHQoSW50ZXJuYWwpCiAKLUpTR2xv
YmFsQ29udGV4dFJlZiBjb250ZXh0SW50ZXJuYWxDb250ZXh0KEpTQ29udGV4dCAqKTsKKy0gKGlk
KWluaXRXaXRoR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWNvbnRleHQ7CisK
K0pTX0VYUE9SVF9QUklWQVRFIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0SW50ZXJuYWxDb250
ZXh0KEpTQ29udGV4dCAqKTsKIAogLSAodm9pZClub3RpZnlFeGNlcHRpb246KEpTVmFsdWVSZWYp
ZXhjZXB0aW9uOwogLSAoSlNWYWx1ZSAqKXZhbHVlRnJvbU5vdGlmeUV4Y2VwdGlvbjooSlNWYWx1
ZVJlZilleGNlcHRpb247CkBAIC02NSwxMCArNzAsMTUgQEAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHRJbnRlcm5hbENvbnRleAogLSAodm9pZCliZWdpbkNhbGxiYWNrV2l0aERhdGE6KENhbGxi
YWNrRGF0YSAqKWNhbGxiYWNrRGF0YSB0aGlzVmFsdWU6KEpTVmFsdWVSZWYpdGhpc1ZhbHVlIGFy
Z3VtZW50Q291bnQ6KHNpemVfdClhcmd1bWVudENvdW50IGFyZ3VtZW50czooY29uc3QgSlNWYWx1
ZVJlZiAqKWFyZ3VtZW50czsKIC0gKHZvaWQpZW5kQ2FsbGJhY2tXaXRoRGF0YTooQ2FsbGJhY2tE
YXRhICopY2FsbGJhY2tEYXRhOwogCi0tIChKU1ZhbHVlICopd3JhcHBlckZvck9iamVjdDooaWQp
b2JqZWN0OworLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmpDT2JqZWN0OihpZClvYmplY3Q7Cist
IChKU1ZhbHVlICopd3JhcHBlckZvckpTT2JqZWN0OihKU1ZhbHVlUmVmKXZhbHVlOworCisrIChK
U0NvbnRleHQgKiljb250ZXh0V2l0aEdsb2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJl
ZilnbG9iYWxDb250ZXh0OwogCiBAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4pIEpTV3JhcHBl
ck1hcCAqd3JhcHBlck1hcDsKIAogQGVuZAogCiAjZW5kaWYKKworI2VuZGlmIC8vIEpTQ29udGV4
dEludGVybmFsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNFeHBvcnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTRXhwb3J0LmgJKHJldmlz
aW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNFeHBvcnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5oPgogCi0jaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECiAKIC8vIFdoZW4gYSBKYXZhU2NyaXB0IHZhbHVlIGlzIGNyZWF0ZWQgZnJv
bSBhbiBpbnN0YW5jZSBvZiBhbiBPYmplY3RpdmUtQyBjbGFzcwogLy8gZm9yIHdoaWNoIG5vIGNv
cHlpbmcgY29udmVyc2lvbiBpcyBzcGVjaWZpZWQgYSBKYXZhU2NyaXB0IHdyYXBwZXIgb2JqZWN0
IHdpbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5oCShyZXZpc2lvbiAxNDM0
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNyArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZiBKU19PQkpD
X0FQSV9FTkFCTEVECisjaWZuZGVmIEpTVmFsdWVfaAorI2RlZmluZSBKU1ZhbHVlX2gKKworI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIEBjbGFzcyBKU0NvbnRleHQ7CiAKQEAgLTEwMiw2ICsx
MDUsMTAgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIE5BKQogKyAoSlNWYWx1ZSAqKXZhbHVl
V2l0aE51bGxJbkNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQ7CiArIChKU1ZhbHVlICopdmFs
dWVXaXRoVW5kZWZpbmVkSW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OwogCisvLyBSZXR1
cm4gdGhlIEMgQVBJIHZlcnNpb24gb2YgdGhpcyB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBmb3Ig
Y29udmVuaWVuY2UKKy8vIGF0IHRoZSBib3VuZGFyaWVzIHdoZW4gY29udmVydGluZyBjb2RlIGZy
b20gdGhlIEMgQVBJIHRvIHRoZSBPYmplY3RpdmUtQyBBUEkuCistIChKU1ZhbHVlUmVmKUpTVmFs
dWVSZWY7CisKIC8vIENvbnZlcnQgdGhpcyB2YWx1ZSB0byBhIGNvcnJlc3BvbmRpbmcgT2JqZWN0
aXZlLUMgb2JqZWN0LCBhY2NvcmRpbmcgdG8gdGhlCiAvLyBjb252ZXJzaW9uIHNwZWNpZmllZCBh
Ym92ZS4KIC0gKGlkKXRvT2JqZWN0OwpAQCAtMjkyLDMgKzI5OSw0IEBAIEpTX0VYUE9SVCBleHRl
cm4gTlNTdHJpbmcgKiBjb25zdCBKU1Byb3AKIAogI2VuZGlmCiAKKyNlbmRpZiAvLyBKU1ZhbHVl
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWUubW0JKHJldmlzaW9uIDE0MzQ3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjQsNyArMjQsNiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLS8vI2ltcG9y
dCAiSlNWYWx1ZS5oIgogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAjaW1wb3J0ICJBUElTaGltcy5o
IgpAQCAtNDUsNyArNDQsNyBAQAogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisj
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAogTlNTdHJpbmcgKiBjb25zdCBKU1Byb3BlcnR5RGVz
Y3JpcHRvcldyaXRhYmxlS2V5ID0gQCJ3cml0YWJsZSI7CiBOU1N0cmluZyAqIGNvbnN0IEpTUHJv
cGVydHlEZXNjcmlwdG9yRW51bWVyYWJsZUtleSA9IEAiZW51bWVyYWJsZSI7CkBAIC01OCw2ICs1
NywxMSBAQCBOU1N0cmluZyAqIGNvbnN0IEpTUHJvcGVydHlEZXNjcmlwdG9yU2V0CiAgICAgSlNW
YWx1ZVJlZiBtX3ZhbHVlOwogfQogCistIChKU1ZhbHVlUmVmKUpTVmFsdWVSZWYKK3sKKyAgICBy
ZXR1cm4gbV92YWx1ZTsKK30KKwogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aE9iamVjdDooaWQpdmFs
dWUgaW5Db250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0CiB7CiAgICAgcmV0dXJuIFtKU1ZhbHVl
IHZhbHVlV2l0aFZhbHVlOm9iamVjdFRvVmFsdWUoY29udGV4dCwgdmFsdWUpIGluQ29udGV4dDpj
b250ZXh0XTsKQEAgLTg5MCw3ICs4OTQsNyBAQCBzdGF0aWMgT2JqY0NvbnRhaW5lckNvbnZlcnRv
cjo6VGFzayBvYmplCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gKE9iamNDb250YWlu
ZXJDb252ZXJ0b3I6OlRhc2speyBvYmplY3QsIHZhbHVlSW50ZXJuYWxWYWx1ZShbY29udGV4dCB3
cmFwcGVyRm9yT2JqZWN0Om9iamVjdF0pLCBDb250YWluZXJOb25lIH07CisgICAgcmV0dXJuIChP
YmpjQ29udGFpbmVyQ29udmVydG9yOjpUYXNrKXsgb2JqZWN0LCB2YWx1ZUludGVybmFsVmFsdWUo
W2NvbnRleHQgd3JhcHBlckZvck9iakNPYmplY3Q6b2JqZWN0XSksIENvbnRhaW5lck5vbmUgfTsK
IH0KIAogSlNWYWx1ZVJlZiBvYmplY3RUb1ZhbHVlKEpTQ29udGV4dCAqY29udGV4dCwgaWQgb2Jq
ZWN0KQpAQCAtOTQxLDcgKzk0NSw3IEBAIEpTVmFsdWVSZWYgdmFsdWVJbnRlcm5hbFZhbHVlKEpT
VmFsdWUgKiAKIAogKyAoSlNWYWx1ZSAqKXZhbHVlV2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVl
IGluQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAogewotICAgIHJldHVybiBbW1tKU1ZhbHVl
IGFsbG9jXSBpbml0V2l0aFZhbHVlOnZhbHVlIGluQ29udGV4dDpjb250ZXh0XSBhdXRvcmVsZWFz
ZV07CisgICAgcmV0dXJuIFtjb250ZXh0IHdyYXBwZXJGb3JKU09iamVjdDp2YWx1ZV07CiB9CiAK
IC0gKEpTVmFsdWUgKilpbml0V2l0aFZhbHVlOihKU1ZhbHVlUmVmKXZhbHVlIGluQ29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmFsdWVJbnRlcm5hbC5oCShyZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTMg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpZm5kZWYgSlNWYWx1ZUludGVybmFsX2gKKyNk
ZWZpbmUgSlNWYWx1ZUludGVybmFsX2gKKwogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuaD4KLSNpbXBvcnQgIkpTVmFsdWUuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTVmFsdWUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElf
RU5BQkxFRAogCiBAaW50ZXJmYWNlIEpTVmFsdWUoSW50ZXJuYWwpCiAKQEAgLTUyLDMgKzU1LDUg
QEAgTlNJbnZvY2F0aW9uICp0eXBlVG9WYWx1ZUludm9jYXRpb25Gb3IoYwogTlNJbnZvY2F0aW9u
ICp2YWx1ZVRvVHlwZUludm9jYXRpb25Gb3IoY29uc3QgY2hhciogZW5jb2RlZFR5cGUpOwogCiAj
ZW5kaWYKKworI2VuZGlmIC8vIEpTVmFsdWVJbnRlcm5hbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaAkocmV2aXNpb24gMTQzNDcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5B
QkxFRAogCiAvLyBBbiBpbnN0YW5jZSBvZiBKU1ZpcnR1YWxNYWNoaW5lIHJlcHJlc2VudHMgYSBz
aW5nbGUgSmF2YVNjcmlwdCAib2JqZWN0IHNwYWNlIgogLy8gb3Igc2V0IG9mIGV4ZWN1dGlvbiBy
ZXNvdXJjZXMuIFRocmVhZCBzYWZldHkgaXMgc3VwcG9ydGVkIGJ5IGxvY2tpbmcgdGhlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZp
c2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hp
bmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDIzICsyNyw4MCBAQAogCiAjaW1wb3J0ICJKYXZh
U2NyaXB0Q29yZS5oIgogCi0jaWYgSlNfT0JKQ19BUElfRU5BQkxFRAorI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oIgogCitzdGF0aWMgTlNNYXBUYWJsZSAqd3JhcHBlckNhY2hlID0gMDsKKwor
c3RhdGljIE11dGV4JiB3cmFwcGVyQ2FjaGVMb2NrKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKE11dGV4LCBtdXRleCwgKCkpOworICAgIHJldHVybiBtdXRleDsKK30KKworc3RhdGljIHZv
aWQgaW5pdFdyYXBwZXJDYWNoZSgpCit7CisgICAgQVNTRVJUKCF3cmFwcGVyQ2FjaGUpOworICAg
IE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMga2V5T3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9u
c09wYXF1ZU1lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09wYXF1ZVBlcnNvbmFsaXR5OworICAg
IE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgdmFsdWVPcHRpb25zID0gTlNQb2ludGVyRnVuY3Rp
b25zV2Vha01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OworICAg
IHdyYXBwZXJDYWNoZSA9IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlPcHRpb25zOmtl
eU9wdGlvbnMgdmFsdWVPcHRpb25zOnZhbHVlT3B0aW9ucyBjYXBhY2l0eTowXTsKK30KKworQGlu
dGVyZmFjZSBKU1ZNV3JhcHBlckNhY2hlIDogTlNPYmplY3QKKysgKHZvaWQpYWRkV3JhcHBlcjoo
SlNWaXJ0dWFsTWFjaGluZSAqKXdyYXBwZXIgZm9ySlNDb250ZXh0R3JvdXBSZWY6KEpTQ29udGV4
dEdyb3VwUmVmKWdyb3VwOworKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXdyYXBwZXJGb3JKU0NvbnRl
eHRHcm91cFJlZjooSlNDb250ZXh0R3JvdXBSZWYpZ3JvdXA7CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBKU1ZNV3JhcHBlckNhY2hlCisKKysgKHZvaWQpYWRkV3JhcHBlcjooSlNWaXJ0dWFsTWFj
aGluZSAqKXdyYXBwZXIgZm9ySlNDb250ZXh0R3JvdXBSZWY6KEpTQ29udGV4dEdyb3VwUmVmKWdy
b3VwCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHdyYXBwZXJDYWNoZUxvY2soKSk7CisgICAg
aWYgKCF3cmFwcGVyQ2FjaGUpCisgICAgICAgIGluaXRXcmFwcGVyQ2FjaGUoKTsKKyAgICAKKyAg
ICBOU01hcEluc2VydCh3cmFwcGVyQ2FjaGUsIGdyb3VwLCB3cmFwcGVyKTsKK30KKworKyAoSlNW
aXJ0dWFsTWFjaGluZSAqKXdyYXBwZXJGb3JKU0NvbnRleHRHcm91cFJlZjooSlNDb250ZXh0R3Jv
dXBSZWYpZ3JvdXAKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIod3JhcHBlckNhY2hlTG9jaygp
KTsKKyAgICBpZiAoIXdyYXBwZXJDYWNoZSkKKyAgICAgICAgaW5pdFdyYXBwZXJDYWNoZSgpOwor
ICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1ZpcnR1YWxNYWNoaW5lICo+KE5TTWFwR2V0
KHdyYXBwZXJDYWNoZSwgZ3JvdXApKTsKK30KKworQGVuZAorCiBAaW1wbGVtZW50YXRpb24gSlNW
aXJ0dWFsTWFjaGluZSB7CiAgICAgSlNDb250ZXh0R3JvdXBSZWYgbV9ncm91cDsKKyAgICBOU01h
cFRhYmxlICptX2NvbnRleHRDYWNoZTsKIH0KIAogLSAoaWQpaW5pdAogeworICAgIEpTQ29udGV4
dEdyb3VwUmVmIGdyb3VwID0gSlNDb250ZXh0R3JvdXBDcmVhdGUoKTsKKyAgICBzZWxmID0gW3Nl
bGYgaW5pdFdpdGhDb250ZXh0R3JvdXBSZWY6Z3JvdXBdOworICAgIC8vIFRoZSBleHRyYSBKU0Nv
bnRleHRHcm91cFJldGFpbiBpcyBiYWxhbmNlZCBoZXJlLgorICAgIEpTQ29udGV4dEdyb3VwUmVs
ZWFzZShncm91cCk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoQ29udGV4
dEdyb3VwUmVmOihKU0NvbnRleHRHcm91cFJlZilncm91cAorewogICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgbV9ncm91
cCA9IEpTQ29udGV4dEdyb3VwQ3JlYXRlKCk7Ci0gICAgdG9KUyhtX2dyb3VwKS0+bV9hcGlEYXRh
ID0gc2VsZjsKKyAgICAKKyAgICBtX2dyb3VwID0gSlNDb250ZXh0R3JvdXBSZXRhaW4oZ3JvdXAp
OworICAgIAorICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMga2V5T3B0aW9ucyA9IE5TUG9p
bnRlckZ1bmN0aW9uc09wYXF1ZU1lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09wYXF1ZVBlcnNv
bmFsaXR5OworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgdmFsdWVPcHRpb25zID0gTlNQ
b2ludGVyRnVuY3Rpb25zV2Vha01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNv
bmFsaXR5OworICAgIG1fY29udGV4dENhY2hlID0gW1tOU01hcFRhYmxlIGFsbG9jXSBpbml0V2l0
aEtleU9wdGlvbnM6a2V5T3B0aW9ucyB2YWx1ZU9wdGlvbnM6dmFsdWVPcHRpb25zIGNhcGFjaXR5
OjBdOworICAgIAogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01Myw3ICsxMTAsNiBAQCAtIChp
ZClpbml0CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAgIHRvSlMobV9ncm91cCktPm1fYXBpRGF0
YSA9IDA7CiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKG1fZ3JvdXApOwogICAgIFtzdXBlciBk
ZWFsbG9jXTsKIH0KQEAgLTYzLDcgKzExOSwyOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91
cEZyb21WaXJ0dWFsTWFjCiAgICAgcmV0dXJuIHZpcnR1YWxNYWNoaW5lLT5tX2dyb3VwOwogfQog
CisrIChKU1ZpcnR1YWxNYWNoaW5lICopdmlydHVhbE1hY2hpbmVXaXRoQ29udGV4dEdyb3VwUmVm
OihKU0NvbnRleHRHcm91cFJlZilncm91cAoreworICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1
YWxNYWNoaW5lID0gW0pTVk1XcmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVm
Omdyb3VwXTsKKyAgICBpZiAoIXZpcnR1YWxNYWNoaW5lKSB7CisgICAgICAgIHZpcnR1YWxNYWNo
aW5lID0gW1tbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdFdpdGhDb250ZXh0R3JvdXBSZWY6
Z3JvdXBdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgW0pTVk1XcmFwcGVyQ2FjaGUgYWRkV3JhcHBl
cjp2aXJ0dWFsTWFjaGluZSBmb3JKU0NvbnRleHRHcm91cFJlZjpncm91cF07CisgICAgfQorICAg
IHJldHVybiB2aXJ0dWFsTWFjaGluZTsKK30KKworLSAoSlNDb250ZXh0ICopY29udGV4dEZvckds
b2JhbENvbnRleHRSZWY6KEpTR2xvYmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0Cit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEpTQ29udGV4dCAqPihOU01hcEdldChtX2NvbnRleHRDYWNoZSwg
Z2xvYmFsQ29udGV4dCkpOworfQorCistICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4dCAqKXdy
YXBwZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRl
eHQKK3sKKyAgICBOU01hcEluc2VydChtX2NvbnRleHRDYWNoZSwgZ2xvYmFsQ29udGV4dCwgd3Jh
cHBlcik7Cit9CisKIEBlbmQKIAorCiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCShyZXZpc2lvbiAx
NDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNSArMjMsMjUgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKLSNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmUuaCIKKyNpZm5kZWYgSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsX2gKKyNkZWZpbmUgSlNWaXJ0dWFsTWFjaGluZUludGVybmFsX2gKKwor
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWaXJ0dWFsTWFjaGluZS5oPgogI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQK
KyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW50ZXJmYWNlIEpTVmlydHVhbE1hY2hpbmUo
SW50ZXJuYWwpCiAKIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5l
KEpTVmlydHVhbE1hY2hpbmUgKik7CiAKKysgKEpTVmlydHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFj
aGluZVdpdGhDb250ZXh0R3JvdXBSZWY6KEpTQ29udGV4dEdyb3VwUmVmKWdyb3VwOworCistIChK
U0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVm
KWdsb2JhbENvbnRleHQ7CistICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4dCAqKXdyYXBwZXIg
Zm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CisK
IEBlbmQKIAogI2VuZGlmCisKKyNlbmRpZiAvLyBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWxfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCShyZXZpc2lvbiAx
NDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywxMyArMjcsMTUgQEAKICNpbXBvcnQgPEpTVmFsdWVJbnRlcm5hbC5o
PgogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJM
RUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBAaW50ZXJmYWNlIEpTV3JhcHBlck1hcCA6
IE5TT2JqZWN0CiAKIC0gKGlkKWluaXRXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dDsK
IAotLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdDsKKy0gKEpTVmFsdWUg
Kilqc1dyYXBwZXJGb3JPYmplY3Q6KGlkKW9iamVjdDsKKworLSAoSlNWYWx1ZSAqKW9iamNXcmFw
cGVyRm9ySlNWYWx1ZVJlZjooSlNWYWx1ZVJlZil2YWx1ZTsKIAogQGVuZAogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTV3JhcHBlck1hcC5tbQkocmV2aXNpb24gMTQzNDcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1dyYXBwZXJNYXAubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbXBvcnQgIkphdmFT
Y3JpcHRDb3JlLmgiCiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKIAogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJu
YWwuaCIKQEAgLTM4Miw3ICszODIsNyBAQCAgICAgICAgIGZvckVhY2hQcm90b2NvbEltcGxlbWVu
dGluZ1Byb3RvCiAgICAgICAgIH0pOwogCiAgICAgICAgIC8vIFNldCBbUHJvdG90eXBlXS4KLSAg
ICAgICAgcHJvdG90eXBlW0AiX19wcm90b19fIl0gPSBbSlNWYWx1ZSB2YWx1ZVdpdGhWYWx1ZTp0
b1JlZihzdXBlckNsYXNzSW5mby0+bV9wcm90b3R5cGUuZ2V0KCkpIGluQ29udGV4dDptX2NvbnRl
eHRdOworICAgICAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0SW50ZXJuYWxDb250ZXh0
KG1fY29udGV4dCksIHRvUmVmKG1fcHJvdG90eXBlLmdldCgpKSwgdG9SZWYoc3VwZXJDbGFzc0lu
Zm8tPm1fcHJvdG90eXBlLmdldCgpKSk7CiAKICAgICAgICAgW2NvbnN0cnVjdG9yIHJlbGVhc2Vd
OwogICAgICAgICBbcHJvdG90eXBlIHJlbGVhc2VdOwpAQCAtNDI1LDcgKzQyNSw4IEBAIC0gKEpT
VmFsdWUgKiljb25zdHJ1Y3RvcgogQGltcGxlbWVudGF0aW9uIEpTV3JhcHBlck1hcCB7CiAgICAg
SlNDb250ZXh0ICptX2NvbnRleHQ7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqbV9jbGFzc01h
cDsKLSAgICBKU0M6OldlYWtHQ01hcDxpZCwgSlNDOjpKU09iamVjdD4gbV9jYWNoZWRXcmFwcGVy
czsKKyAgICBKU0M6OldlYWtHQ01hcDxpZCwgSlNDOjpKU09iamVjdD4gbV9jYWNoZWRKU1dyYXBw
ZXJzOworICAgIE5TTWFwVGFibGUgKm1fY2FjaGVkT2JqQ1dyYXBwZXJzOwogfQogCiAtIChpZClp
bml0V2l0aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKQEAgLTQzNCw2ICs0MzUsMTAgQEAg
LSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZQogICAgIGlmICghc2VsZikK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAorICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMga2V5
T3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc09wYXF1ZU1lbW9yeSB8IE5TUG9pbnRlckZ1bmN0
aW9uc09wYXF1ZVBlcnNvbmFsaXR5OworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgdmFs
dWVPcHRpb25zID0gTlNQb2ludGVyRnVuY3Rpb25zV2Vha01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0
aW9uc09iamVjdFBlcnNvbmFsaXR5OworICAgIG1fY2FjaGVkT2JqQ1dyYXBwZXJzID0gW1tOU01h
cFRhYmxlIGFsbG9jXSBpbml0V2l0aEtleU9wdGlvbnM6a2V5T3B0aW9ucyB2YWx1ZU9wdGlvbnM6
dmFsdWVPcHRpb25zIGNhcGFjaXR5OjBdOworICAgIAogICAgIG1fY29udGV4dCA9IGNvbnRleHQ7
CiAgICAgbV9jbGFzc01hcCA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CiAg
ICAgcmV0dXJuIHNlbGY7CkBAIC00NjEsOSArNDY2LDkgQEAgLSAoSlNPYmpDQ2xhc3NJbmZvKilj
bGFzc0luZm9Gb3JDbGFzczooQwogICAgIHJldHVybiBtX2NsYXNzTWFwW2Nsc10gPSBbW1tKU09i
akNDbGFzc0luZm8gYWxsb2NdIGluaXRXaXRoQ29udGV4dDptX2NvbnRleHQgZm9yQ2xhc3M6Y2xz
IHN1cGVyQ2xhc3NJbmZvOltzZWxmIGNsYXNzSW5mb0ZvckNsYXNzOmNsYXNzX2dldFN1cGVyY2xh
c3MoY2xzKV1dIGF1dG9yZWxlYXNlXTsKIH0KIAotLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmpl
Y3Q6KGlkKW9iamVjdAorLSAoSlNWYWx1ZSAqKWpzV3JhcHBlckZvck9iamVjdDooaWQpb2JqZWN0
CiB7Ci0gICAgSlNDOjpKU09iamVjdCoganNXcmFwcGVyID0gbV9jYWNoZWRXcmFwcGVycy5nZXQo
b2JqZWN0KTsKKyAgICBKU0M6OkpTT2JqZWN0KiBqc1dyYXBwZXIgPSBtX2NhY2hlZEpTV3JhcHBl
cnMuZ2V0KG9iamVjdCk7CiAgICAgaWYgKGpzV3JhcHBlcikKICAgICAgICAgcmV0dXJuIFtKU1Zh
bHVlIHZhbHVlV2l0aFZhbHVlOnRvUmVmKGpzV3JhcHBlcikgaW5Db250ZXh0Om1fY29udGV4dF07
CiAKQEAgLTQ4Miw3ICs0ODcsMTcgQEAgLSAoSlNWYWx1ZSAqKXdyYXBwZXJGb3JPYmplY3Q6KGlk
KW9iamVjdAogICAgIC8vICAgICBidXQgc3RpbGwsIHdvdWxkIHByb2JhYmx5IG5pY2VyIGlmIHdl
IG1hZGUgaXQgc28gdGhhdCBvbmx5IG9uZSBhc3NvY2lhdGVkIG9iamVjdCB3YXMgcmVxdWlyZWQs
IGJyb2FkY2FzdGluZyBvYmplY3QgZGVhbGxvYy4KICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY29udGV4dEludGVybmFsQ29udGV4dChtX2NvbnRleHQpKTsKICAgICBqc1dyYXBwZXIg
PSB0b0pTKGV4ZWMsIHZhbHVlSW50ZXJuYWxWYWx1ZSh3cmFwcGVyKSkudG9PYmplY3QoZXhlYyk7
Ci0gICAgbV9jYWNoZWRXcmFwcGVycy5zZXQob2JqZWN0LCBqc1dyYXBwZXIpOworICAgIG1fY2Fj
aGVkSlNXcmFwcGVycy5zZXQob2JqZWN0LCBqc1dyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVy
OworfQorCistIChKU1ZhbHVlICopb2JqY1dyYXBwZXJGb3JKU1ZhbHVlUmVmOihKU1ZhbHVlUmVm
KXZhbHVlCit7CisgICAgSlNWYWx1ZSAqd3JhcHBlciA9IHN0YXRpY19jYXN0PEpTVmFsdWUgKj4o
TlNNYXBHZXQobV9jYWNoZWRPYmpDV3JhcHBlcnMsIHZhbHVlKSk7CisgICAgaWYgKCF3cmFwcGVy
KSB7CisgICAgICAgIHdyYXBwZXIgPSBbW1tKU1ZhbHVlIGFsbG9jXSBpbml0V2l0aFZhbHVlOnZh
bHVlIGluQ29udGV4dDptX2NvbnRleHRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgTlNNYXBJbnNl
cnQobV9jYWNoZWRPYmpDV3JhcHBlcnMsIHZhbHVlLCB3cmFwcGVyKTsKKyAgICB9CiAgICAgcmV0
dXJuIHdyYXBwZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSmF2YVNj
cmlwdENvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0phdmFT
Y3JpcHRDb3JlLmgJKHJldmlzaW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSmF2YVNjcmlwdENvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZkNGLmg+CiAKLSNpZiBkZWZpbmVkKF9fT0JKQ19fKSAmJiBKU19PQkpD
X0FQSV9FTkFCTEVECisjaWYgZGVmaW5lZChfX09CSkNfXykgJiYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKIAogI2ltcG9ydCAiSlNDb250ZXh0LmgiCiAjaW1wb3J0ICJKU1ZhbHVlLmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5oCShy
ZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFj
a0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KIAotI2lmIEpTX09CSkNfQVBJX0VOQUJM
RUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBKU09iamVjdFJlZiBvYmpDQ2FsbGJhY2tG
dW5jdGlvbkZvck1ldGhvZChKU0NvbnRleHQgKiwgQ2xhc3MsIFByb3RvY29sICosIEJPT0wgaXNJ
bnN0YW5jZU1ldGhvZCwgU0VMLCBjb25zdCBjaGFyKiB0eXBlcyk7CiBKU09iamVjdFJlZiBvYmpD
Q2FsbGJhY2tGdW5jdGlvbkZvckJsb2NrKEpTQ29udGV4dCAqLCBpZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlz
aW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVu
Y3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKIAotI2lmIEpTX09CSkNfQVBJX0VO
QUJMRUQKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiAjaW1wb3J0ICJBUElDYXN0LmgiCiAj
aW1wb3J0ICJBUElTaGltcy5oIgogI2ltcG9ydCAiRXJyb3IuaCIKICNpbXBvcnQgIkpTQmxvY2tB
ZGFwdG9yLmgiCisjaW1wb3J0ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2ltcG9ydCAiSlNDZWxs
LmgiCisjaW1wb3J0ICJKU0NlbGxJbmxpbmVzLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5h
bC5oIgogI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwu
aCIKQEAgLTQyNiw4ICs0MjksNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9yZXN1bHQocmVzdWx0
KQogICAgIHsKICAgICAgICAgQVNTRVJUKHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhvZCB8
fCBpbnN0YW5jZUNsYXNzKTsKLSAgICAgICAgaWYgKG1fdHlwZSAhPSBDYWxsYmFja0luc3RhbmNl
TWV0aG9kKQotICAgICAgICAgICAgW1ttX2ludm9jYXRpb24uZ2V0KCkgdGFyZ2V0XSByZXRhaW5d
OwogICAgIH0KIAogICAgIH5PYmpDQ2FsbGJhY2tGdW5jdGlvbigpCkBAIC00NDQsNiArNDQ1LDEy
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKICAgICB9CiAKKyAg
ICB2b2lkIHNldENvbnRleHQoSlNDb250ZXh0ICpjb250ZXh0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX2NvbnRleHQuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQuc2V0KGNvbnRleHQpOwor
ICAgIH0KKwogICAgIGlkIHdyYXBwZWRCbG9jaygpCiAgICAgewogICAgICAgICByZXR1cm4gbV90
eXBlID09IENhbGxiYWNrQmxvY2sgPyBbbV9pbnZvY2F0aW9uIHRhcmdldF0gOiBuaWw7CkBAIC00
NzQsMTEgKzQ4MSw4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2EK
ICAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxPYmpDQ2Fs
bGJhY2tGdW5jdGlvbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShmdW5jdGlvbikpOwogICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IGNhbGxiYWNrLT5jb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA1ODk0Ci0gICAgICAgIC8vIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0aGF0IHRoZSBjb250
ZXh0IGJlIHJldGFpbmVkLCBpdCB3b3VsZCBwcm9iYWJseSBiZSBtb3JlCi0gICAgICAgIC8vIGFw
cHJvcHJpYXRlIHRvIHVzZSBhIG5ldyBKU0NvbnRleHQgaW5zdGFuY2UgKGNyZWF0aW5nIG9uZSBp
ZiBuZWNlc3NhcnkpLgotICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoSlNDOjpjcmVhdGVUeXBl
RXJyb3IodG9KUyhjYWxsZXJDb250ZXh0KSwgIk9iamVjdGl2ZS1DIGNhbGxiYWNrIGZ1bmN0aW9u
IGNvbnRleHQgcmVsZWFzZWQiKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjYWxsZXJDb250ZXh0KTsKKyAgICAgICAgY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdp
dGhHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKHRvSlMoY2FsbGVyQ29udGV4dCktPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKV07CisgICAgICAgIGNhbGxiYWNrLT5zZXRD
b250ZXh0KGNvbnRleHQpOwogICAgIH0KIAogICAgIENhbGxiYWNrRGF0YSBjYWxsYmFja0RhdGE7
CkBAIC02MTAsNyArNjE0LDcgQEAgc3RhdGljIEpTT2JqZWN0UmVmIG9iakNDYWxsYmFja0Z1bmN0
aW9uRgogICAgIEpTT2JqZWN0UmVmIGZ1bmN0aW9uT2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRl
eHRJbnRlcm5hbENvbnRleHQoY29udGV4dCksIG9iakNDYWxsYmFja0Z1bmN0aW9uQ2xhc3MoKSwg
bmV3IE9iakNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGludm9jYXRpb24sIHR5cGUsIGluc3Rh
bmNlQ2xhc3MsIGFyZ3VtZW50cy5yZWxlYXNlKCksIHJlc3VsdC5yZWxlYXNlKCkpKTsKICAgICBK
U1ZhbHVlICp2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aFZhbHVlOmZ1bmN0aW9uT2JqZWN0IGlu
Q29udGV4dDpjb250ZXh0XTsKICAgICB2YWx1ZVtAImxlbmd0aCJdID0gQChhcmd1bWVudENvdW50
KTsKLSAgICB2YWx1ZVtAIl9fcHJvdG9fXyJdID0gY29udGV4dFtAIkZ1bmN0aW9uIl1bQCJwcm90
b3R5cGUiXTsKKyAgICBKU09iamVjdFNldFByb3RvdHlwZShjb250ZXh0SW50ZXJuYWxDb250ZXh0
KGNvbnRleHQpLCBmdW5jdGlvbk9iamVjdCwgdmFsdWVJbnRlcm5hbFZhbHVlKGNvbnRleHRbQCJG
dW5jdGlvbiJdW0AicHJvdG90eXBlIl0pKTsKICAgICB2YWx1ZVtAInRvU3RyaW5nIl0gPSBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAIihmdW5jdGlvbigpeyByZXR1cm4gJyIKICAgICAgICAgImZ1
bmN0aW9uIDxPYmplY3RpdmUtQz4oKSB7IiAiXFxuIgogICAgICAgICAiICAgIFtuYXRpdmUgY29k
ZV0iICAgICAgICAgICJcXG4iCkBAIC02MzQsNyArNjM4LDcgQEAgSlNPYmplY3RSZWYgb2JqQ0Nh
bGxiYWNrRnVuY3Rpb25Gb3JCbG9jawogICAgICAgICByZXR1cm4gMDsKICAgICBjb25zdCBjaGFy
KiBzaWduYXR1cmUgPSBfQmxvY2tfc2lnbmF0dXJlKHRhcmdldCk7CiAgICAgTlNJbnZvY2F0aW9u
ICppbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBpbnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVy
ZTpbTlNNZXRob2RTaWduYXR1cmUgc2lnbmF0dXJlV2l0aE9iakNUeXBlczpzaWduYXR1cmVdXTsK
LSAgICBbaW52b2NhdGlvbiBzZXRUYXJnZXQ6dGFyZ2V0XTsKKyAgICBbaW52b2NhdGlvbiBzZXRU
YXJnZXQ6W3RhcmdldCBjb3B5XV07CiAgICAgcmV0dXJuIG9iakNDYWxsYmFja0Z1bmN0aW9uRm9y
SW52b2NhdGlvbihjb250ZXh0LCBpbnZvY2F0aW9uLCBDYWxsYmFja0Jsb2NrLCBuaWwsIHNpZ25h
dHVyZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5jCShyZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkuYwkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBzdGQ6Omlz
bmFuOwogCiAjZW5kaWYKIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKICNlbmRpZgogCkBAIC0x
MDQ3LDcgKzEwNDcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgIDo6
U2V0RXJyb3JNb2RlKDApOwogI2VuZGlmCiAKLSNpZiBKU19PQkpDX0FQSV9FTkFCTEVECisjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKICAgICB0ZXN0T2JqZWN0aXZlQ0FQSSgpOwogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlz
aW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBleHRlcm4gIkMiIGNvbnN0IGNoYXIg
KiBfQmxvY2tfc2lnbmF0dXJlCiBleHRlcm4gaW50IGZhaWxlZDsKIGV4dGVybiAiQyIgdm9pZCB0
ZXN0T2JqZWN0aXZlQ0FQSSh2b2lkKTsKIAotI2lmIEpTX09CSkNfQVBJX0VOQUJMRUQKKyNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRAogCiBAcHJvdG9jb2wgUGFyZW50T2JqZWN0IDxKU0V4cG9ydD4K
IEBlbmQKQEAgLTU3LDcgKzU3LDcgQEAgLSAoTlNTdHJpbmcgKilnZXRTdHJpbmc7CiBKU0V4cG9y
dEFzKHRlc3RBcmd1bWVudFR5cGVzLAogLSAoTlNTdHJpbmcgKil0ZXN0QXJndW1lbnRUeXBlc1dp
dGhJbnQ6KGludClpIGRvdWJsZTooZG91YmxlKWQgYm9vbGVhbjooQk9PTCliIHN0cmluZzooTlNT
dHJpbmcgKilzIG51bWJlcjooTlNOdW1iZXIgKiluIGFycmF5OihOU0FycmF5ICopYSBkaWN0aW9u
YXJ5OihOU0RpY3Rpb25hcnkgKilvCiApOwotLSAodm9pZCljYWxsYmFjazoodm9pZCheKShpbnQp
KWJsb2NrOworLSAodm9pZCljYWxsYmFjazooSlNWYWx1ZSAqKWZ1bmN0aW9uOwogQGVuZAogCiBA
aW50ZXJmYWNlIFRlc3RPYmplY3QgOiBQYXJlbnRPYmplY3QgPFRlc3RPYmplY3Q+CkBAIC04NSw5
ICs4NSw5IEBAIC0gKE5TU3RyaW5nICopdGVzdEFyZ3VtZW50VHlwZXNXaXRoSW50OigKIHsKICAg
ICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZCwlZywlZCwlQCwlZCwlQCwl
QCIsIGksIGQsIGI9PVlFUz90cnVlOmZhbHNlLHMsW24gaW50VmFsdWVdLGFbMV0sb1tAIngiXV07
CiB9Ci0tICh2b2lkKWNhbGxiYWNrOih2b2lkKF4pKGludCkpYmxvY2sKKy0gKHZvaWQpY2FsbGJh
Y2s6KEpTVmFsdWUgKilmdW5jdGlvbgogewotICAgIGJsb2NrKDQyKTsKKyAgICBbZnVuY3Rpb24g
Y2FsbFdpdGhBcmd1bWVudHM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltOU051bWJlciBudW1i
ZXJXaXRoSW50OjQyXV1dOwogfQogQGVuZAogCkBAIC00ODIsMTAgKzQ4Miw4IEBAIHZvaWQgdGVz
dE9iamVjdGl2ZUNBUEkoKQogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQxID0gW1tKU0NvbnRl
eHQgYWxsb2NdIGluaXRdOwogICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQyID0gW1tKU0NvbnRl
eHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dDEudmlydHVhbE1hY2hpbmVd
OwogICAgICAgICBKU1ZhbHVlICp2YWx1ZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aERvdWJsZTo0MiBp
bkNvbnRleHQ6Y29udGV4dDJdOwotICAgICAgICBjaGVja1Jlc3VsdChAInZhbHVlLmNvbnRleHQg
PT0gY29udGV4dDIiLCB2YWx1ZS5jb250ZXh0ID09IGNvbnRleHQyKTsKICAgICAgICAgY29udGV4
dDFbQCJwYXNzVmFsdWVCZXR3ZWVuQ29udGV4dHMiXSA9IHZhbHVlOwogICAgICAgICBKU1ZhbHVl
ICpyZXN1bHQgPSBbY29udGV4dDEgZXZhbHVhdGVTY3JpcHQ6QCJwYXNzVmFsdWVCZXR3ZWVuQ29u
dGV4dHMiXTsKLSAgICAgICAgY2hlY2tSZXN1bHQoQCJyZXN1bHQuY29udGV4dCA9PSBjb250ZXh0
MSIsIHJlc3VsdC5jb250ZXh0ID09IGNvbnRleHQxKTsKICAgICAgICAgY2hlY2tSZXN1bHQoQCJb
dmFsdWUgaXNFcXVhbFRvT2JqZWN0OnJlc3VsdF0iLCBbdmFsdWUgaXNFcXVhbFRvT2JqZWN0OnJl
c3VsdF0pOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTg4LDEzICs1ODgsMTMg
QEAKIAkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwQTE2N0JBQjg3MDA2RDc2
MEEgLyogSlNFeHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7
IH07IH07CiAJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRjE2
N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8q
IEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RTNDNjA4MTY3QkFCODcwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gKi87IH07Ci0JCTg2
RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MDkxNjdCQUI4NzAwNkQ3
NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggKi87IH07CisJCTg2RTNDNjE3MTY3QkFCRUUwMDZE
NzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MDkxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTQ29udGV4dElu
dGVybmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBCMTY3QkFCODcwMDZE
NzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gKi87IH07CiAJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYw
QSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCAqLzsg
fTsKIAkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRDE2N0JBQjg3MDA2RDc2
MEEgLyogSlNWYWx1ZS5tbSAqLzsgfTsKLQkJODZFM0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
VmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oICovOyB9
OworCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRTE2N0JBQjg3
MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZFM0M2MUMxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmly
dHVhbE1hY2hpbmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NkUzQzYxMDE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSAqLzsg
fTsKLQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2
MTExNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovOyB9Owor
CQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYxMTE2
N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODZFODU1MzkxMTFCOTk2ODAw
MUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVp
bGRlci5oICovOyB9OwogCQk4NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
RUJGMkY5MTU2MEYwMzYwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuY3BwICovOyB9OwogCQk4
NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVCRjJGQTE1NjBGMDM2MDA4RTky
MjIgLyogTmFtZUNvbnN0cnVjdG9yLmggKi87IH07CkBAIC0yOTI4LDcgKzI5MjgsMTAgQEAKIAkJ
CQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNDBFMTZG
QzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4
NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE1MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3Nl
bWJsZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVF
NyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLywKQEAg
LTMxMjUsNyArMzEyOCw2IEBACiAJCQkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pT
VmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAw
NkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODZFM0M2MTcxNjdCQUJF
RTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBp
biBIZWFkZXJzICovLApAQCAtMzE2MCwxMSArMzE2Miw5IEBACiAJCQkJQkMxOEM0MkEwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUwN0QyOUUwRTg3MUU1
RTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEyMTY3
QkFCRDcwMDZENzYwQSAvKiBKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkUzQzYxQjE2
N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyQzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNWYWx1ZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFyaWFibGVPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5l
LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FE
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRo
U2NvcGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODcsNyArMTg3LDYgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAog
ICAgICwgbV90aW1lb3V0Q291bnQoNTEyKQogI2VuZGlmCiAgICAgLCBtX25ld1N0cmluZ3NTaW5j
ZUxhc3RIYXNoQ29uc3QoMCkKLSAgICAsIG1fYXBpRGF0YSgwKQogI2lmIEVOQUJMRShBU1NFTUJM
RVIpCiAgICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3NlbWJsZXIoZXhlY3V0YWJsZUFs
bG9jYXRvcikpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDggKzQ3OSw2
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlz
Y2FyZEFsbENvZGUoKTsKIAotICAgICAgICB2b2lkICptX2FwaURhdGE7Ci0KICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHJldmlzaW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw2IEBAIEpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChKU0dsb2JhbEQKICAgICAsIG1fd2Vha1JhbmRv
bShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21TZWVkKCkgPyBPcHRpb25zOjpmb3JjZWRXZWFrUmFu
ZG9tU2VlZCgpIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQogICAgICwgbV9ldmFsRW5h
YmxlZCh0cnVlKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUpCi0gICAgLCBtX2FwaURhdGEoMCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNDM0NzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTYsOCArMTk2LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRGVidWdn
ZXIoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyOyB9CiAgICAgYm9vbCBoYXNQcm9maWxlcigp
IGNvbnN0IHsgcmV0dXJuIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnN1cHBvcnRzUHJvZmls
aW5nKHRoaXMpOyB9CiAKLSAgICB2b2lkKiBtX2FwaURhdGE7Ci0KIHByb3RlY3RlZDoKICAgICBK
U19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwKTsKIApJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MzUwMykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTMtMDItMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5i
ZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBPYmplY3RpdmUtQyBBUEk6IE5lZWQgYSB3YXkgdG8g
dXNlIHRoZSBPYmplY3RpdmUtQyBKYXZhU2NyaXB0IEFQSSB3aXRoIFdlYktpdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MDU5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmlu
ZXMuaDogQWRkZWQgZW5hYmxlIGZsYWcgZm9yIEpTQyBPYmplY3RpdmUtQyBBUEkgc28gaXQgY2Fu
IGJlIHVzZWQgaW4KKyAgICAgICAgZXhwb3J0IGZpbGVzLgorCiAyMDEzLTAyLTIwICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgTW9hciBoYXJkZW5pbmcKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvRmVhdHVyZURlZmluZXMuaAkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL1dURi93
dGYvRmVhdHVyZURlZmluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTY2LDYgKzU2NiwxMCBAQAog
I2RlZmluZSBFTkFCTEVfSkFWQVNDUklQVF9JMThOX0FQSSAwCiAjZW5kaWYKIAorI2lmICFkZWZp
bmVkKEpTQ19PQkpDX0FQSV9FTkFCTEVEKQorI2RlZmluZSBKU0NfT0JKQ19BUElfRU5BQkxFRCAo
ZGVmaW5lZChfX2NsYW5nX18pICYmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA5MCAmJiAhZGVmaW5lZChfX2kzODZfXykpCisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykKICNkZWZpbmUgRU5BQkxFX0xF
R0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTIDAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQzNTAzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTMtMDItMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJn
QGFwcGxlLmNvbT4KKworICAgICAgICBPYmplY3RpdmUtQyBBUEk6IE5lZWQgYSB3YXkgdG8gdXNl
IHRoZSBPYmplY3RpdmUtQyBKYXZhU2NyaXB0IEFQSSB3aXRoIFdlYktpdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MDU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OnNl
dFdpbmRvdyk6IFNpbmNlIHdlJ3JlIGJhc2ljYWxseSBhYmFuZG9uaW5nIGEgSlNET01XaW5kb3cg
aGVyZSwgd2UgY2FsbAorICAgICAgICBnYXJiYWdlQ29sbGVjdFNvb24oKS4KKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5oOiBOZXcgZnVuY3Rpb24gdG8gZ2V0IHRoZSBKU0NvbnRleHQgZm9yIHRo
ZSBnbG9iYWwgb2JqZWN0IG9mIHRoZSBjdXJyZW50IG1haW4gd29ybGQuCisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbTogCisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpqYXZhU2NyaXB0Q29udGV4dCk6IERpdHRvLgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lmg6IEFkZGVkIGlmZGVmIGd1YXJkcy4gQWxzbyBuZXcg
Y29udmVuaWVuY2UgY29udmVyc2lvbiBmdW5jdGlvbiBmb3IgdGhlIEpTQyBPYmotQyBBUEkuCisg
ICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW06IEpTQzo6SlNWYWx1ZSBh
bmQgSlNWYWx1ZSBjb25mbGljdCB3aXRoIG9uZSBhbm90aGVyLCBzbyB3ZSBoYXZlIHRvIGJlIG1v
cmUgc3BlY2lmaWMuCisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBfZ2xvYmFsQ29udGV4dFJl
Zl0pOiBVc2VmdWwgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSBKU0dsb2JhbENvbnRl
eHRSZWYgb2YgYSBwYXJ0aWN1bGFyIFdlYlNjcmlwdE9iamVjdC4KKyAgICAgICAgKC1bV2ViU2Ny
aXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFyZ3VtZW50czpdKToKKyAgICAgICAg
KC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAoLVtXZWJT
Y3JpcHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB3
ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6XSk6CisgICAgICAgICgrW1dlYlNjcmlwdE9iamVjdCBfY29u
dmVydFZhbHVlVG9PYmpjVmFsdWU6SlNDOjpvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6
CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBKU1ZhbHVlXSk6IEltcGxlbWVudGF0aW9uIG9m
IGNvbnZlbmllbmNlIFdlYlNjcmlwdE9iamVjdCBjb252ZXJzaW9uIGZ1bmN0aW9uIHRvIG5ldyBP
YmplY3RpdmUtQyBBUEkuCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQ
cml2YXRlLmg6CisKIDIwMTMtMDItMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDM0NDEuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTUwMSw2ICs1MDEsOSBAQCBfX1pO
N1dlYkNvcmUxNlNjcmlwdENvbnRyb2xsZXIxMGluaXRTY3JpCiBfX1pON1dlYkNvcmUxNlNjcmlw
dENvbnRyb2xsZXIxMWNyZWF0ZVdvcmxkRXYKIF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxl
cjEzZXhlY3V0ZVNjcmlwdEVSS04zV1RGNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxNlNjcmlwdENv
bnRyb2xsZXIxN2NhbkV4ZWN1dGVTY3JpcHRzRU5TXzMzUmVhc29uRm9yQ2FsbGluZ0NhbkV4ZWN1
dGVTY3JpcHRzRQorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECitfX1pON1dlYkNvcmUxNlNjcmlw
dENvbnRyb2xsZXIxN2phdmFTY3JpcHRDb250ZXh0RXYKKyNlbmRpZgogX19aTjdXZWJDb3JlMTZT
Y3JpcHRDb250cm9sbGVyMTh3aW5kb3dTY3JpcHRPYmplY3RFdgogX19aTjdXZWJDb3JlMTZTY3Jp
cHRDb250cm9sbGVyMjBleGVjdXRlU2NyaXB0SW5Xb3JsZEVQTlNfMTVET01XcmFwcGVyV29ybGRF
UktOM1dURjZTdHJpbmdFYgogX19aTjdXZWJDb3JlMTZTY3JpcHRDb250cm9sbGVyMjFwcm9jZXNz
aW5nVXNlckdlc3R1cmVFdgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgogCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
QEAgLTYwLDYgKzYxLDE0IEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6ZGVzdHJveShKU0NlbGwq
IGMKICAgICBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oY2VsbCktPkpTRE9NV2luZG93
U2hlbGw6On5KU0RPTVdpbmRvd1NoZWxsKCk7CiB9CiAKK3ZvaWQgSlNET01XaW5kb3dTaGVsbDo6
c2V0V2luZG93KEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0RPTVdpbmRvdyogd2lu
ZG93KQoreworICAgIEFTU0VSVF9BUkcod2luZG93LCB3aW5kb3cpOworICAgIHNldFRhcmdldChn
bG9iYWxEYXRhLCB3aW5kb3cpOworICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgd2luZG93KTsKKyAgICBnY0NvbnRyb2xs
ZXIoKS5nYXJiYWdlQ29sbGVjdFNvb24oKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpz
ZXRXaW5kb3coUGFzc1JlZlB0cjxET01XaW5kb3c+IGRvbVdpbmRvdykKIHsKICAgICAvLyBSZXBs
YWNpbmcgSlNET01XaW5kb3cgdmlhIHRlbGxpbmcgSlNET01XaW5kb3dTaGVsbCB0byB1c2UgdGhl
IHNhbWUgRE9NV2luZG93IGl0IGFscmVhZHkgdXNlcyBtYWtlcyBubyBzZW5zZSwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgJKHJldmlzaW9u
IDE0MzQ3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgICAgIEpTRE9NV2lu
ZG93KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTVdpbmRvdyo+KHRh
cmdldCgpKTsgfQotICAgICAgICB2b2lkIHNldFdpbmRvdyhKU0M6OkpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNET01XaW5kb3cqIHdpbmRvdykKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUX0FSRyh3aW5kb3csIHdpbmRvdyk7Ci0gICAgICAgICAgICBzZXRUYXJnZXQoZ2xvYmFsRGF0
YSwgd2luZG93KTsKLSAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3QoKkpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwgd2luZG93KTsKLSAgICAgICAgfQorICAg
ICAgICB2b2lkIHNldFdpbmRvdyhKU0M6OkpTR2xvYmFsRGF0YSYsIEpTRE9NV2luZG93Kik7CiAg
ICAgICAgIHZvaWQgc2V0V2luZG93KFBhc3NSZWZQdHI8RE9NV2luZG93Pik7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDE0MzQ3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyQmFzZS5oIgogI2luY2x1ZGUgIlNjcmlwdEluc3RhbmNl
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8aGVhcC9T
dHJvbmcuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KQEAgLTM0LDYgKzM1LDcgQEAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogT0JKQ19DTEFTUyBXZWJTY3JpcHRPYmplY3Q7CitPQkpDX0NMQVNTIEpTQ29u
dGV4dDsKICNlbmRpZgogCiBzdHJ1Y3QgTlBPYmplY3Q7CkBAIC0xNTEsNiArMTUzLDkgQEAgcHVi
bGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIFdlYlNjcmlwdE9iamVjdCogd2luZG93U2Ny
aXB0T2JqZWN0KCk7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICBKU0NvbnRleHQgKmph
dmFTY3JpcHRDb250ZXh0KCk7CisjZW5kaWYKICNlbmRpZgogCiAgICAgSlNDOjpKU09iamVjdCog
anNPYmplY3RGb3JQbHVnaW5FbGVtZW50KEhUTUxQbHVnSW5FbGVtZW50Kik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0JKHJl
dmlzaW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbXBvcnQgIm9i
amNfaW5zdGFuY2UuaCIKICNpbXBvcnQgInJ1bnRpbWVfcm9vdC5oIgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQVBJQ2FzdC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0SW50
ZXJuYWwuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKICNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKQEAgLTEwOSw2ICsxMTAsMTYgQEAgV2ViU2NyaXB0T2JqZWN0KiBTY3Jp
cHRDb250cm9sbGVyOjp3aW5kbwogICAgIHJldHVybiBtX3dpbmRvd1NjcmlwdE9iamVjdC5nZXQo
KTsKIH0KIAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECitKU0NvbnRleHQgKlNjcmlwdENvbnRy
b2xsZXI6OmphdmFTY3JpcHRDb250ZXh0KCkKK3sKKyAgICBpZiAoIWNhbkV4ZWN1dGVTY3JpcHRz
KE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEdsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoYmluZGluZ1Jvb3RPYmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KSldOworICAgIHJldHVybiBjb250ZXh0OworfQorI2VuZGlmCisKIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6dXBkYXRlUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKIHsKICAgICBpZiAobV93aW5kb3dT
Y3JpcHRPYmplY3QpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2Ny
aXB0T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9X
ZWJTY3JpcHRPYmplY3QuaAkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
OSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorI2lmbmRlZiBXZWJTY3JpcHRPYmplY3RfaAor
I2RlZmluZSBXZWJTY3JpcHRPYmplY3RfaAorCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvV2ViS2l0QXZhaWxhYmlsaXR5Lmg+CkBAIC0xODksNiArMTkyLDcgQEAgQGludGVy
ZmFjZSBOU09iamVjdCAoV2ViU2NyaXB0aW5nKQogCiAvLyBXZWJTY3JpcHRPYmplY3QgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQGNsYXNzIEpT
VmFsdWU7CiBAY2xhc3MgV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZTsKIEBjbGFzcyBXZWJGcmFtZTsK
IApAQCAtMjk3LDYgKzMwMSwxNyBAQCBAaW50ZXJmYWNlIFdlYlNjcmlwdE9iamVjdCA6IE5TT2Jq
ZWN0CiAqLwogLSAodm9pZClzZXRFeGNlcHRpb246KE5TU3RyaW5nICopZGVzY3JpcHRpb247CiAK
KworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisvKiEKKyAgICBAbWV0aG9kIEpTVmFsdWUKKyAg
ICBAcmVzdWx0IFRoZSBlcXVpdmFsZW50IE9iamVjdGl2ZS1DIEpTVmFsdWUgZm9yIHRoaXMgV2Vi
U2NyaXB0T2JqZWN0LgorICAgIEBkaXNjdXNzaW9uIFVzZSB0aGlzIG1ldGhvZCB0byBicmlkZ2Ug
YmV0d2VlbiB0aGUgV2ViU2NyaXB0T2JqZWN0IGFuZCAKKyAgICBKYXZhU2NyaXB0Q29yZSBPYmpl
Y3RpdmUtQyBBUElzLgorKi8KKy0gKEpTVmFsdWUgKilKU1ZhbHVlOworI2VuZGlmCisKIEBlbmQK
IAogCkBAIC0zMTYsMyArMzMxLDUgQEAgQGludGVyZmFjZSBXZWJVbmRlZmluZWQgOiBOU09iamVj
dCA8TlNDbwogQGVuZAogCiAjZW5kaWYKKworI2VuZGlmIC8vIFdlYlNjcmlwdE9iamVjdF9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVjdC5t
bQkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAKICNpbXBvcnQg
InJ1bnRpbWVfb2JqZWN0LmgiCiAjaW1wb3J0ICJydW50aW1lX3Jvb3QuaCIKICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4
dEludGVybmFsLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlSW50ZXJuYWwuaD4K
ICNpbXBvcnQgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2ltcG9ydCA8cnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CkBA
IC01MywxMCArNTUsMjIgQEAKICNpbXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVz
cGFjZSBKU0M6OkJpbmRpbmdzOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3VzaW5nIEpT
Qzo6Q2FsbERhdGE7Cit1c2luZyBKU0M6OkNhbGxUeXBlOwordXNpbmcgSlNDOjpDYWxsVHlwZU5v
bmU7Cit1c2luZyBKU0M6OkV4ZWNTdGF0ZTsKK3VzaW5nIEpTQzo6SWRlbnRpZmllcjsKK3VzaW5n
IEpTQzo6SlNMb2NrSG9sZGVyOwordXNpbmcgSlNDOjpKU09iamVjdDsKK3VzaW5nIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXI7Cit1c2luZyBKU0M6OlB1dFByb3BlcnR5U2xvdDsKK3VzaW5nIEpT
Qzo6anNDYXN0OwordXNpbmcgSlNDOjpqc1VuZGVmaW5lZDsKK3VzaW5nIEpTQzo6bWFrZVNvdXJj
ZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgTlNNYXBUYWJsZSogSlNXcmFwcGVy
Q2FjaGU7CkBAIC0yMzYsNiArMjUwLDEzIEBAIC0gKEJPT0wpX2lzU2FmZVNjcmlwdAogICAgIHJl
dHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coX3ByaXZh
dGUtPm9yaWdpblJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIHRhcmdl
dC0+aW1wbCgpKTsKIH0KIAorLSAoSlNHbG9iYWxDb250ZXh0UmVmKV9nbG9iYWxDb250ZXh0UmVm
Cit7CisgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICByZXR1cm4gdG9HbG9iYWxSZWYoW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpKTsKK30KKwogLSAob25ld2F5IHZvaWQpcmVsZWFzZQogewogICAgIC8v
IElmIHdlJ3JlIHJlbGVhc2luZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QsIHJl
bW92ZSBpZiBmcm9tIHRoZSBtYXAuCkBAIC0zMDQsNyArMzI1LDcgQEAgLSAoaWQpY2FsbFdlYlNj
cmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogCi0gICAgSlNWYWx1ZSBmdW5jdGlv
biA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmcobmFtZSkp
KTsKKyAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElk
ZW50aWZpZXIoZXhlYywgU3RyaW5nKG5hbWUpKSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwog
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0zMTcsNyArMzM4LDcgQEAgLSAo
aWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
LnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3Nl
bGYgX2ltcF0sIGFyZ0xpc3QpOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgW3Nl
bGYgX2ltcF0sIGFyZ0xpc3QpOwogICAgIFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CiAKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKQEAgLTM0Myw3ICszNjQsNyBAQCAtIChpZClldmFsdWF0ZVdlYlNj
cmlwdDooTlNTdHJpbmcgKilzY3JpCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
CiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRp
bWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSks
IEpTQzo6SlNWYWx1ZSgpLCAwKTsKKyAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01h
aW5UaHJlYWRFeGVjU3RhdGU6OmV2YWx1YXRlKGV4ZWMsIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlw
dCkpLCBKU0M6OkpTVmFsdWUoKSwgMCk7CiAgICAgW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKIAogICAgIGlkIHJl
c3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJldHVy
blZhbHVlIG9yaWdpblJvb3RPYmplY3Q6W3NlbGYgX29yaWdpblJvb3RPYmplY3RdIHJvb3RPYmpl
Y3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKQEAgLTM4NSw3ICs0MDYsNyBAQCAtIChpZCl2YWx1ZUZv
cktleTooTlNTdHJpbmcgKilrZXkKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5l
bnRseSBoZWxkCiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAKLSAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgU3RyaW5nKGtleSkpKTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxm
IF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCBTdHJpbmcoa2V5KSkpOwogICAgICAg
ICAKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBhZGRF
eGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CkBAIC00NjQsNyArNDg1LDcgQEAgLSAoaWQpd2ViU2Ny
aXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClpbgogICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOwogCiAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4KTsKKyAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBpbmRleCk7CiAKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwpAQCAt
NTExLDcgKzUzMiw3IEBAIC0gKEpTT2JqZWN0UmVmKUpTT2JqZWN0CiAgICAgcmV0dXJuIHRvUmVm
KFtzZWxmIF9pbXBdKTsKIH0KIAotKyAoaWQpX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU1Zh
bHVlKXZhbHVlIG9yaWdpblJvb3RPYmplY3Q6KFJvb3RPYmplY3QqKW9yaWdpblJvb3RPYmplY3Qg
cm9vdE9iamVjdDooUm9vdE9iamVjdCopcm9vdE9iamVjdAorKyAoaWQpX2NvbnZlcnRWYWx1ZVRv
T2JqY1ZhbHVlOihKU0M6OkpTVmFsdWUpdmFsdWUgb3JpZ2luUm9vdE9iamVjdDooUm9vdE9iamVj
dCopb3JpZ2luUm9vdE9iamVjdCByb290T2JqZWN0OihSb290T2JqZWN0Kilyb290T2JqZWN0CiB7
CiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTU1NSw2ICs1NzYsMTggQEAgKyAoaWQpX2NvbnZlcnRWYWx1
ZVRvT2JqY1ZhbHVlOihKU1ZhbHVlKQogICAgIHJldHVybiBuaWw7CiB9CiAKKworI2lmIEpTQ19P
QkpDX0FQSV9FTkFCTEVECistIChKU1ZhbHVlICopSlNWYWx1ZQoreworICAgIGlmICghW3NlbGYg
X2lzU2FmZVNjcmlwdF0pCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBbSlNW
YWx1ZSB2YWx1ZVdpdGhWYWx1ZTpbc2VsZiBKU09iamVjdF0gCisgICAgICAgICAgICAgICAgICAg
IGluQ29udGV4dDpbSlNDb250ZXh0IGNvbnRleHRXaXRoR2xvYmFsQ29udGV4dFJlZjpbc2VsZiBf
Z2xvYmFsQ29udGV4dFJlZl1dXTsKK30KKyNlbmRpZgorCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2Vi
U2NyaXB0T2JqZWN0IChXZWJLaXRDb2NvYUJpbmRpbmdzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmgJKHJldmlz
aW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2Jq
ZWN0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIEBpbnRlcmZhY2Ug
V2ViU2NyaXB0T2JqZWN0IChQcml2YXRlKQogLSAoQk9PTClfaGFzSW1wOwogLSAoSlNDOjpCaW5k
aW5nczo6Um9vdE9iamVjdCopX3Jvb3RPYmplY3Q7CiAtIChKU0M6OkJpbmRpbmdzOjpSb290T2Jq
ZWN0Kilfb3JpZ2luUm9vdE9iamVjdDsKKy0gKEpTR2xvYmFsQ29udGV4dFJlZilfZ2xvYmFsQ29u
dGV4dFJlZjsKIEBlbmQKIAogQGludGVyZmFjZSBXZWJTY3JpcHRPYmplY3QgKFN0YWdlZEZvclB1
YmxpYykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzUwMykKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEz
LTAyLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgd2F5IHRvIHVzZSB0aGUgT2JqZWN0aXZlLUMgSmF2
YVNjcmlwdCBBUEkgd2l0aCBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNjA1OQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdh
cmVuLgorCisgICAgICAgIEFkZGl0aW9uIG9mIGFwcHJvcHJpYXRlIGRlbGVnYXRlIGNhbGxiYWNr
cyBhbmQgc3VwcG9ydCB0byB0aGUgV2ViS2l0IEFQSS4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcuaDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZERlbGVnYXRl
SW1wbGVtZW50YXRpb25DYWNoZSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5oOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZzpmb3JjZVVzZXJHZXN0dXJlOl0pOgorICAg
ICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmc6
d2l0aEdsb2JhbE9iamVjdDppblNjcmlwdFdvcmxkOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBf
amF2YVNjcmlwdENvbnRleHRGb3JTY3JpcHRXb3JsZDpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUg
amF2YVNjcmlwdENvbnRleHRdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lTG9hZERlbGVn
YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaDoKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW06CisgICAgICAgICgtW1dlYlNjcmlwdENh
bGxGcmFtZSBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6SlNDOjpdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0Q2FsbEZyYW1lIGV4Y2VwdGlvbl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRDYWxsRnJh
bWUgZXZhbHVhdGVXZWJTY3JpcHQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJTY3JpcHRXb3Js
ZC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViU2NyaXB0V29ybGQubW06CisgICAgICAgICgrW1dl
YlNjcmlwdFdvcmxkIHNjcmlwdFdvcmxkRm9ySmF2YVNjcmlwdENvbnRleHQ6XSk6CisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9jYWNoZUZyYW1lTG9h
ZERlbGVnYXRlSW1wbGVtZW50YXRpb25zXSk6CisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6
CisgICAgICAgICgtW1dlYlZpZXcgYWVEZXNjQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJp
bmc6XSk6CisgICAgICAgICgtW1dlYlZpZXcgX2NvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVk
SW5mbzpmb3JFbGVtZW50Ol0pOgorCiAyMDEzLTAyLTE5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIENsYXJpZnkgaXNJbldpbmRvdyB2cy4gaXNWaXNp
YmxlIHBhdGggdGhyb3VnaCB0byBSZW5kZXJMYXllckNvbXBvc2l0b3IKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tCShyZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQs
NyBAQAogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVBy
aXZhdGUuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRp
b25DRi5oPgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbk1hYy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuaD4KQEAgLTExNyw2ICsxMTgsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJl
ZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dp
ZGdldC5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYktpdC9E
T01IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTE5NTAsNyArMTk1MiwxNCBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENsCiAgICAgRnJhbWUgKmZyYW1lID0gY29yZShtX3dl
YkZyYW1lLmdldCgpKTsKICAgICBTY3JpcHRDb250cm9sbGVyICpzY3JpcHQgPSBmcmFtZS0+c2Ny
aXB0KCk7CiAKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgIGlmIChpbXBsZW1lbnRhdGlv
bnMtPmRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0Rm9yRnJhbWVGdW5jKSB7CisgICAgICAgIENh
bGxGcmFtZUxvYWREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbnMtPmRpZENyZWF0ZUphdmFTY3JpcHRD
b250ZXh0Rm9yRnJhbWVGdW5jLCB3ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpkaWRDcmVhdGVK
YXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZTopLAorICAgICAgICAgICAgc2NyaXB0LT5qYXZhU2Ny
aXB0Q29udGV4dCgpLCBtX3dlYkZyYW1lLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKGltcGxlbWVu
dGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpIHsKKyNlbHNlCiAgICAg
aWYgKGltcGxlbWVudGF0aW9ucy0+ZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmMpIHsK
KyNlbmRpZgogICAgICAgICBDYWxsRnJhbWVMb2FkRGVsZWdhdGUoaW1wbGVtZW50YXRpb25zLT5k
aWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZp
ZXc6ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6KSwKICAgICAgICAgICAgIHNjcmlwdC0+
d2luZG93U2NyaXB0T2JqZWN0KCksIG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIH0gZWxzZSBpZiAo
aW1wbGVtZW50YXRpb25zLT53aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGVGdW5jKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNo
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJEZWxlZ2F0
ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oCShyZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgc3RydWN0IFdlYlJlc291cmNlRGVsZWdhdGVJbXBs
ZW1lbnRhdGlvbgogfTsKIAogc3RydWN0IFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoZSB7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICBJTVAgZGlkQ3JlYXRlSmF2
YVNjcmlwdENvbnRleHRGb3JGcmFtZUZ1bmM7CisjZW5kaWYKICAgICBJTVAgZGlkQ2xlYXJXaW5k
b3dPYmplY3RGb3JGcmFtZUZ1bmM7CiAgICAgSU1QIGRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJh
bWVJblNjcmlwdFdvcmxkRnVuYzsKICAgICBJTVAgZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmpl
Y3RGb3JGcmFtZUZ1bmM7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5oCShy
ZXZpc2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogQGNsYXNzIERPTURvY3VtZW50Owog
QGNsYXNzIERPTUhUTUxFbGVtZW50OworQGNsYXNzIEpTQ29udGV4dDsKIEBjbGFzcyBOU1VSTFJl
cXVlc3Q7CiBAY2xhc3MgV2ViQXJjaGl2ZTsKIEBjbGFzcyBXZWJEYXRhU291cmNlOwpAQCAtMjEz
LDQgKzIxNCwxNCBAQCBAaW50ZXJmYWNlIFdlYkZyYW1lIDogTlNPYmplY3QKICAgICBicmlkZ2Ug
YmV0d2VlbiB0aGUgV2ViS2l0IGFuZCBKYXZhU2NyaXB0Q29yZSBBUElzLgogKi8KIC0gKEpTR2xv
YmFsQ29udGV4dFJlZilnbG9iYWxDb250ZXh0OworCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
Ky8qIQorICAgIEBtZXRob2QgamF2YVNjcmlwdENvbnRleHQKKyAgICBAcmVzdWx0IFRoZSBmcmFt
ZSdzIGdsb2JhbCBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LiBVc2UgdGhpcyBtZXRob2Qg
dG8gCisgICAgYnJpZGdlIGJldHdlZW4gdGhlIFdlYktpdCBhbmQgT2JqZWN0aXZlLUMgSmF2YVNj
cmlwdENvcmUgQVBJLgorKi8KKy0gKEpTQ29udGV4dCAqKWphdmFTY3JpcHRDb250ZXh0OworI2Vu
ZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAog
I2ltcG9ydCAiV2ViU2NyaXB0V29ybGRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVy
bmFsLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU0NvbnRleHRJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9BWE9iamVj
dENhY2hlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlPYmplY3QuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQW5pbWF0aW9uQ29udHJvbGxlci5oPgpAQCAtMTA2LDcgKzEwNyw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHVzaW5nIEpTQzo6SlNHbG9iYWxPYmplY3Q7CiB1
c2luZyBKU0M6OkpTTG9jazsKLXVzaW5nIEpTQzo6SlNWYWx1ZTsKIAogLyoKIEhlcmUgaXMgdGhl
IGN1cnJlbnQgYmVoYXZpb3IgbWF0cml4IGZvciBmb3VyIHR5cGVzIG9mIG5hdmlnYXRpb25zOgpA
QCAtNTgwLDcgKzU4MCw3IEBAIC0gKE5TU3RyaW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3IKICAgICBBU1NFUlQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgUmV0
YWluUHRyPFdlYkZyYW1lPiBwcm90ZWN0KHNlbGYpOyAvLyBFeGVjdXRpbmcgYXJiaXRyYXJ5IEph
dmFTY3JpcHQgY2FuIGRlc3Ryb3kgdGhlIGZyYW1lLgogICAgIAotICAgIEpTVmFsdWUgcmVzdWx0
ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc3RyaW5nLCBm
b3JjZVVzZXJHZXN0dXJlKS5qc1ZhbHVlKCk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHN0cmluZywgZm9yY2VV
c2VyR2VzdHVyZSkuanNWYWx1ZSgpOwogCiAgICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lKSAv
LyBJbiBjYXNlIHRoZSBzY3JpcHQgcmVtb3ZlZCBvdXIgZnJhbWUgZnJvbSB0aGUgcGFnZS4KICAg
ICAgICAgcmV0dXJuIEAiIjsKQEAgLTEwNTksNyArMTA1OSw3IEBAIC0gKE5TU3RyaW5nICopX3N0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3IKICAgICBBU1NFUlQoZnJhbWUtPmRvY3VtZW50KCkpOwog
ICAgIFJldGFpblB0cjxXZWJGcmFtZT4gd2ViRnJhbWUoa2l0KGZyYW1lKSk7IC8vIFJ1bm5pbmcg
YXJiaXRyYXJ5IEphdmFTY3JpcHQgY2FuIGRlc3Ryb3kgdGhlIGZyYW1lLgogCi0gICAgSlNWYWx1
ZSByZXN1bHQgPSBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHRJbldvcmxkKGNvcmUod29y
bGQpLCBzdHJpbmcsIHRydWUpLmpzVmFsdWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0SW5Xb3JsZChjb3JlKHdvcmxkKSwgc3RyaW5n
LCB0cnVlKS5qc1ZhbHVlKCk7CiAKICAgICBpZiAoIXdlYkZyYW1lLT5fcHJpdmF0ZS0+Y29yZUZy
YW1lKSAvLyBJbiBjYXNlIHRoZSBzY3JpcHQgcmVtb3ZlZCBvdXIgZnJhbWUgZnJvbSB0aGUgcGFn
ZS4KICAgICAgICAgcmV0dXJuIEAiIjsKQEAgLTEwODYsNiArMTA4NiwxNiBAQCAtIChKU0dsb2Jh
bENvbnRleHRSZWYpX2dsb2JhbENvbnRleHRGb3JTCiAgICAgcmV0dXJuIHRvR2xvYmFsUmVmKGNv
cmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdChjb3JlV29ybGQpLT5nbG9iYWxFeGVjKCkp
OwogfQogCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKy0gKEpTQ29udGV4dCAqKV9qYXZhU2Ny
aXB0Q29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkCit7CisgICAg
SlNHbG9iYWxDb250ZXh0UmVmIGdsb2JhbENvbnRleHRSZWYgPSBbc2VsZiBfZ2xvYmFsQ29udGV4
dEZvclNjcmlwdFdvcmxkOndvcmxkXTsKKyAgICBpZiAoIWdsb2JhbENvbnRleHRSZWYpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBbSlNDb250ZXh0IGNvbnRleHRXaXRoR2xvYmFsQ29u
dGV4dFJlZjpnbG9iYWxDb250ZXh0UmVmXTsKK30KKyNlbmRpZgorCiAtICh2b2lkKXNldEFsbG93
c1Njcm9sbGVyc1RvT3ZlcmxhcENvbnRlbnQ6KEJPT0wpZmxhZwogewogICAgIEFTU0VSVChbW1tz
ZWxmIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkR5bmFtaWNTY3Jv
bGxCYXJzVmlldyBjbGFzc11dKTsKQEAgLTE0NzEsNCArMTQ4MSwxNCBAQCAtIChKU0dsb2JhbENv
bnRleHRSZWYpZ2xvYmFsQ29udGV4dAogICAgIHJldHVybiB0b0dsb2JhbFJlZihjb3JlRnJhbWUt
PnNjcmlwdCgpLT5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5nbG9iYWxF
eGVjKCkpOwogfQogCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKy0gKEpTQ29udGV4dCAqKWph
dmFTY3JpcHRDb250ZXh0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3Jl
RnJhbWU7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBjb3JlRnJhbWUtPnNjcmlwdCgpLT5qYXZhU2NyaXB0Q29udGV4dCgpOworfQorI2VuZGlmCisK
IEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVMb2FkRGVsZWdh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lTG9h
ZERlbGVnYXRlLmgJKHJldmlzaW9uIDE0MzQ3MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWVMb2FkRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDQgKzE5NCwx
OSBAQCBAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJGcmFtZUxvYWREZWxlZ2F0CiAqLwogLSAodm9p
ZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyB3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGU6
KFdlYlNjcmlwdE9iamVjdCAqKXdpbmRvd1NjcmlwdE9iamVjdCBXRUJLSVRfT0JKQ19NRVRIT0Rf
QU5OT1RBVElPTihBVkFJTEFCTEVfV0VCS0lUX1ZFUlNJT05fMV8zX0FORF9MQVRFUl9CVVRfREVQ
UkVDQVRFRF9JTl9XRUJLSVRfVkVSU0lPTl8zXzApOwogCisjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKKy8qIQorICAgIEBtZXRob2Qgd2ViVmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dDpj
b250ZXh0Rm9yRnJhbWU6CisgICAgQGFic3RyYWN0IE5vdGlmaWVzIHRoZSBkZWxlZ2F0ZSB0aGF0
IGEgbmV3IEphdmFTY3JpcHQgY29udGV4dCBoYXMgYmVlbiBjcmVhdGVkIGNyZWF0ZWQuCisgICAg
QHBhcmFtIHdlYlZpZXcgVGhlIFdlYlZpZXcgc2VuZGluZyB0aGUgbWVzc2FnZS4KKyAgICBAcGFy
YW0gY29udGV4dCBUaGUgSlNDb250ZXh0IHJlcHJlc2VudGluZyB0aGUgZnJhbWUncyBKYXZhU2Ny
aXB0IHdpbmRvdyBvYmplY3QuCisgICAgQHBhcmFtIGZyYW1lIFRoZSBXZWJGcmFtZSB0byB3aGlj
aCB0aGUgY29udGV4dCBiZWxvbmdzLgorICAgIEBkaXNjdXNzaW9uIElmIGEgZGVsZWdhdGUgaW1w
bGVtZW50cyB3ZWJWaWV3OmRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0OmZvckZyYW1lOiBhbG9u
ZyB3aXRoIGVpdGhlciAKKyAgICB3ZWJWaWV3OmRpZENsZWFyV2luZG93T2JqZWN0OmZvckZyYW1l
OiBvciB3ZWJWaWV3OndpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZTosIG9ubHkgCisgICAgd2Vi
VmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZSB3aWxsIGJlIGludm9rZWQu
IFRoaXMgZW5hYmxlcyBhIGRlbGVnYXRlIHRvIGltcGxlbWVudCAKKyAgICBtdWx0aXBsZSB2ZXJz
aW9ucyB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNp
b25zIG9mIFdlYktpdC4KKyovCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IGRp
ZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZvckZyYW1lOihX
ZWJGcmFtZSAqKWZyYW1lOworI2VuZGlmCisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTUsNiArOTUsMTAgQEAgQGludGVyZmFjZSBXZWJGcmFtZSAoV2ViUHJpdmF0ZSkKIC0gKE5TU3Ry
aW5nICopX3N0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOihOU1N0cmluZyAq
KXN0cmluZyB3aXRoR2xvYmFsT2JqZWN0OihKU09iamVjdFJlZilnbG9iYWxPYmplY3QgaW5TY3Jp
cHRXb3JsZDooV2ViU2NyaXB0V29ybGQgKil3b3JsZDsKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilf
Z2xvYmFsQ29udGV4dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkOwogCisj
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKy0gKEpTQ29udGV4dCAqKV9qYXZhU2NyaXB0Q29udGV4
dEZvclNjcmlwdFdvcmxkOihXZWJTY3JpcHRXb3JsZCAqKXdvcmxkOworI2VuZGlmCisKIC0gKHZv
aWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilm
cmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJl
cGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZTsKIC0g
KHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJl
cGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFy
dFJlcGxhY2U7CiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aE1hcmt1cFN0cmluZzooTlNT
dHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3Ry
aW5nIHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFj
ZTooQk9PTClzbWFydFJlcGxhY2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlNjcmlwdERlYnVnRGVsZWdhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLm1tCShyZXZpc2lvbiAxNDM0NzEpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdERlYnVnRGVsZWdhdGUubW0JKHdvcmtp
bmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgTlNTdHJpbmcgKiBjb25zdCBXZWJTY3JpcHRFcnJv
ckxpbmVOdW1iZQogCiBAaW50ZXJmYWNlIFdlYlNjcmlwdENhbGxGcmFtZSAoV2ViU2NyaXB0RGVi
dWdEZWxlZ2F0ZUludGVybmFsKQogCi0tIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpT
VmFsdWUpdmFsdWU7CistIChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTQzo6SlNWYWx1
ZSl2YWx1ZTsKIAogQGVuZAogCkBAIC0xMTMsNyArMTEzLDcgQEAgLSAodm9pZClfY2xlYXJEZWJ1
Z2dlckNhbGxGcmFtZQogICAgIF9wcml2YXRlLT5kZWJ1Z2dlckNhbGxGcmFtZSA9IDA7CiB9CiAK
LS0gKGlkKV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZSl2YWx1ZQorLSAoaWQpX2Nv
bnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOihKU0M6OkpTVmFsdWUpdmFsdWUKIHsKICAgICBpZiAoIXZh
bHVlKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMjE0LDcgKzIxNCw3IEBAIC0gKGlkKWV4Y2Vw
dGlvbgogICAgIGlmICghX3ByaXZhdGUtPmRlYnVnZ2VyQ2FsbEZyYW1lKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBfcHJpdmF0ZS0+ZGVidWdnZXJDYWxs
RnJhbWUtPmV4Y2VwdGlvbigpOworICAgIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24gPSBfcHJpdmF0
ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV4Y2VwdGlvbigpOwogICAgIHJldHVybiBleGNlcHRpb24g
PyBbc2VsZiBfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6ZXhjZXB0aW9uXSA6IG5pbDsKIH0KIApA
QCAtMjQxLDE1ICsyNDEsMTUgQEAgLSAoaWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICop
c2NyaQogCiAgICAgICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29w
ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0KTsKIAotICAgICAgICBK
U1ZhbHVlIGV4Y2VwdGlvbjsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZUluR2xv
YmFsQ2FsbEZyYW1lKHNjcmlwdCwgZXhjZXB0aW9uLCBnbG9iYWxPYmplY3QpOworICAgICAgICBK
U0M6OkpTVmFsdWUgZXhjZXB0aW9uOworICAgICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gZXZh
bHVhdGVJbkdsb2JhbENhbGxGcmFtZShzY3JpcHQsIGV4Y2VwdGlvbiwgZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgICAgIHJldHVybiBbc2VsZiBfY29udmVy
dFZhbHVlVG9PYmpjVmFsdWU6ZXhjZXB0aW9uXTsKICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IFtz
ZWxmIF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHRdIDogbmlsOyAgICAgICAgCiAgICAg
fQogCi0gICAgSlNWYWx1ZSBleGNlcHRpb247Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBfcHJpdmF0
ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsKKyAgICBK
U0M6OkpTVmFsdWUgZXhjZXB0aW9uOworICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBfcHJpdmF0
ZS0+ZGVidWdnZXJDYWxsRnJhbWUtPmV2YWx1YXRlKHNjcmlwdCwgZXhjZXB0aW9uKTsKICAgICBp
ZiAoZXhjZXB0aW9uKQogICAgICAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRWYWx1ZVRvT2JqY1Zh
bHVlOmV4Y2VwdGlvbl07CiAgICAgcmV0dXJuIHJlc3VsdCA/IFtzZWxmIF9jb252ZXJ0VmFsdWVU
b09iamNWYWx1ZTpyZXN1bHRdIDogbmlsOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJTY3JpcHRXb3JsZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViU2NyaXB0V29ybGQuaAkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw5
IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTR2xv
YmFsQ29udGV4dFJlZjsKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KIAorQGNs
YXNzIEpTQ29udGV4dDsKIEBjbGFzcyBXZWJTY3JpcHRXb3JsZFByaXZhdGU7CiAKIEBpbnRlcmZh
Y2UgV2ViU2NyaXB0V29ybGQgOiBOU09iamVjdCB7CkBAIC0zNSw2ICszNiw5IEBAIEBpbnRlcmZh
Y2UgV2ViU2NyaXB0V29ybGQgOiBOU09iamVjdCB7CiArIChXZWJTY3JpcHRXb3JsZCAqKXdvcmxk
OwogCiArIChXZWJTY3JpcHRXb3JsZCAqKXNjcmlwdFdvcmxkRm9yR2xvYmFsQ29udGV4dDooSlNH
bG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
KysgKFdlYlNjcmlwdFdvcmxkICopc2NyaXB0V29ybGRGb3JKYXZhU2NyaXB0Q29udGV4dDooSlND
b250ZXh0ICopY29udGV4dDsKKyNlbmRpZgogCiAtICh2b2lkKXVucmVnaXN0ZXJXb3JsZDsKIApJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJTY3JpcHRXb3JsZC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxkLm1tCShyZXZp
c2lvbiAxNDM0NzEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlNjcmlwdFdvcmxk
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0pT
RE9NQmluZGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U0NvbnRleHRJbnRlcm5hbC5oPgogCiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTEwNiw2
ICsxMDcsMTMgQEAgKyAoV2ViU2NyaXB0V29ybGQgKilzY3JpcHRXb3JsZEZvckdsb2JhbAogICAg
IHJldHVybiBbc2VsZiBmaW5kT3JDcmVhdGVXb3JsZDpjdXJyZW50V29ybGQodG9KUyhjb250ZXh0
KSldOwogfQogCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKysgKFdlYlNjcmlwdFdvcmxkICop
c2NyaXB0V29ybGRGb3JKYXZhU2NyaXB0Q29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAorewor
ICAgIHJldHVybiBbc2VsZiBzY3JpcHRXb3JsZEZvckdsb2JhbENvbnRleHQ6Y29udGV4dEludGVy
bmFsQ29udGV4dChjb250ZXh0KV07Cit9CisjZW5kaWYKKwogQGVuZAogCiBAaW1wbGVtZW50YXRp
b24gV2ViU2NyaXB0V29ybGQgKFdlYkludGVybmFsKQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTQzNDcxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU5LDYgKzE2NTksOSBAQCAtICh2
b2lkKV9jYWNoZUZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50CiAgICAgY2FjaGUtPmRpZFB1c2hT
dGF0ZVdpdGhpblBhZ2VGb3JGcmFtZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rv
cih3ZWJWaWV3OmRpZFB1c2hTdGF0ZVdpdGhpblBhZ2VGb3JGcmFtZTopKTsKICAgICBjYWNoZS0+
ZGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZUZvckZyYW1lRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0
ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZUZvckZyYW1lOikp
OwogICAgIGNhY2hlLT5kaWRQb3BTdGF0ZVdpdGhpblBhZ2VGb3JGcmFtZUZ1bmMgPSBnZXRNZXRo
b2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZFBvcFN0YXRlV2l0aGluUGFnZUZvckZy
YW1lOikpOworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgY2FjaGUtPmRpZENyZWF0ZUph
dmFTY3JpcHRDb250ZXh0Rm9yRnJhbWVGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0
b3Iod2ViVmlldzpkaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dDpmb3JGcmFtZTopKTsKKyNlbmRp
ZgogICAgIGNhY2hlLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lRnVuYyA9IGdldE1ldGhv
ZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJXaW5kb3dPYmplY3Q6Zm9yRnJh
bWU6KSk7CiAgICAgY2FjaGUtPmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblNjcmlwdFdv
cmxkRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJX
aW5kb3dPYmplY3RGb3JGcmFtZTppblNjcmlwdFdvcmxkOikpOwogICAgIGNhY2hlLT5kaWRDbGVh
ckluc3BlY3RvcldpbmRvd09iamVjdEZvckZyYW1lRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0ZSwg
QHNlbGVjdG9yKHdlYlZpZXc6ZGlkQ2xlYXJJbnNwZWN0b3JXaW5kb3dPYmplY3Q6Zm9yRnJhbWU6
KSk7CkBAIC00OTE2LDcgKzQ5MTksNyBAQCAtIChCT09MKXNob3VsZENsb3NlCiAgICAgcmV0dXJu
IGNvcmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZENsb3NlKCk7CiB9CiAKLXN0YXRpYyBOU0FwcGxl
RXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUganNWYWx1ZSkKK3N0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQogewogICAgIE5TQXBw
bGVFdmVudERlc2NyaXB0b3IqIGFlRGVzYyA9IDA7CiAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFu
KCkpCkBAIC00OTU3LDcgKzQ5NjAsNyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciog
YWVEZXNjRnJvCiAgICAgICAgICAgICAgICAgcmV0dXJuIGFlRGVzYzsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IG9iamVjdC0+dG9QcmltaXRp
dmUoZXhlYyk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJp
bWl0aXZlKGV4ZWMpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gW05TQXBw
bGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3JdOwpAQCAtNDk3Nyw3ICs0OTgwLDcgQEAg
LSAoTlNBcHBsZUV2ZW50RGVzY3JpcHRvciAqKWFlRGVzY0J5RXZhbAogICAgICAgICByZXR1cm4g
bmlsOwogICAgIGlmICghY29yZUZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gY29yZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlw
dChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gY29y
ZUZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChzY3JpcHQsIHRydWUpLmpzVmFsdWUoKTsK
ICAgICBpZiAoIXJlc3VsdCkgLy8gRklYTUU6IHBhc3MgZXJyb3JzCiAgICAgICAgIHJldHVybiAw
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvcmVGcmFtZS0+c2NyaXB0KCktPmdsb2JhbE9iamVj
dChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKSk7CkBAIC02Njk5LDcgKzY3
MDIsNyBAQCAtIChKU1ZhbHVlUmVmKV9jb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzCiAgICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIEpTVmFsdWUganNWYWx1ZSA9IHRvSlMo
ZXhlYywgdmFsdWUpOworICAgIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1
ZSk7CiAgICAgaWYgKCFqc1ZhbHVlLmluaGVyaXRzKCZKU0VsZW1lbnQ6OnNfaW5mbykpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICBKU0VsZW1lbnQq
IGpzRWxlbWVudCA9IHN0YXRpY19jYXN0PEpTRWxlbWVudCo+KGFzT2JqZWN0KGpzVmFsdWUpKTsK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0MzUwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDEzLTAyLTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgT2JqZWN0aXZlLUMgQVBJOiBOZWVkIGEgd2F5IHRvIHVzZSB0aGUg
T2JqZWN0aXZlLUMgSmF2YVNjcmlwdCBBUEkgd2l0aCBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjA1OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0cyBmb3IgdGhlIFdl
YktpdCBBUEkgcG9ydGlvbiBvZiB0aGUgSlNDIE9iamVjdGl2ZS1DIEFQSS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0pTQ29udGV4dEJhY2tGb3J3YXJkQ2Fj
aGUxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0pTQ29u
dGV4dEJhY2tGb3J3YXJkQ2FjaGUyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvbWFjL1dlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbTogQWRkZWQu
CisgICAgICAgICgtW015Q29uc29sZSBsb2c6XSk6CisgICAgICAgICgtW015Q29uc29sZSBwcmlu
dEhlbGxvV29ybGRdKToKKyAgICAgICAgKC1bTXlDb25zb2xlIGFkZDp0bzpdKToKKyAgICAgICAg
KC1bRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3OmRp
ZEZpbmlzaExvYWRGb3JGcmFtZTpdKToKKyAgICAgICAgKC1bRGlkQ3JlYXRlSmF2YVNjcmlwdENv
bnRleHRGcmFtZUxvYWREZWxlZ2F0ZSB3ZWJWaWV3OmRpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0
OmZvckZyYW1lOl0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKwogMjAxMy0wMi0xNSAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkIHJ1bnRpbWUgZmxhZyBmb3IgQ2FudmFzUGF0
aApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0MzQ3MSkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDkgQEAKIAkJQzBCRDY2OUYxMzFEM0NGRjAwRTE4
RjJBIC8qIFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVuZGxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQkQ2NjlFMTMxRDND
RkYwMEUxOEYyQSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyRG9lc250RmlyZUVhcmx5X0J1bmRsZS5j
cHAgKi87IH07CiAJCUMwQzVEM0JFMTQ1OThCNkYwMEE4MDJBNiAvKiBHZXRCYWNraW5nU2NhbGVG
YWN0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MEM1RDNCQzE0NTk4QjZGMDBBODAyQTYgLyogR2V0QmFja2luZ1NjYWxlRmFjdG9yLm1tICovOyB9
OwogCQlDMEM1RDNDNjE0NTk5MTI5MDBBODAyQTYgLyogR2V0QmFja2luZ1NjYWxlRmFjdG9yX0J1
bmRsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMw
QzVEM0JEMTQ1OThCNkYwMEE4MDJBNiAvKiBHZXRCYWNraW5nU2NhbGVGYWN0b3JfQnVuZGxlLm1t
ICovOyB9OworCQlDMkNGOTc1QTE2Q0VDNzE0MDA1NEU5OUQgLyogSlNDb250ZXh0QmFja0Zvcndh
cmRDYWNoZTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkNGOTc1OTE2Q0VDNjlFMDA1NEU5OUQgLyogSlNDb250ZXh0QmFja0Zvcndh
cmRDYWNoZTIuaHRtbCAqLzsgfTsKKwkJQzJDRjk3NUIxNkNFQzcxQjAwNTRFOTlEIC8qIEpTQ29u
dGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDRjk3NTgxNkNFQzY5RTAwNTRFOTlEIC8qIEpTQ29u
dGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwgKi87IH07CisJCUMyRUIyREQzMTZDQUM3QUMwMDlC
NTJFRSAvKiBXZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVCMkREMTE2Q0FDN0FDMDA5QjUy
RUUgLyogV2ViVmlld0RpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0Lm1tICovOyB9OwogCQlDNTA3
RThBNzE0QzY1NDVCMDA1RDZCM0IgLyogSW5zcGVjdG9yQmFyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUwN0U4QTYxNEM2NTQ1QjAwNUQ2QjNCIC8q
IEluc3BlY3RvckJhci5tbSAqLzsgfTsKIAkJQzUxQUZCOTkxNjlGNDlGRjAwOUNDRjY2IC8qIEZp
bmRNYXRjaGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzUxQUZCOTgxNjlGNDlGRjAwOUNDRjY2IC8qIEZpbmRNYXRjaGVzLm1tICovOyB9OwogCQlD
NTQwRjc3NjE1MkU0REEwMDBBNDBDOEMgLyogU2ltcGxpZnlNYXJrdXAubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTQwRjc3NTE1MkU0REEwMDBBNDBD
OEMgLyogU2ltcGxpZnlNYXJrdXAubW0gKi87IH07CkBAIC0yMjYsNiArMjI5LDggQEAKIAkJCWRz
dFBhdGggPSBUZXN0V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSA3
OwogCQkJZmlsZXMgPSAoCisJCQkJQzJDRjk3NUIxNkNFQzcxQjAwNTRFOTlEIC8qIEpTQ29udGV4
dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJQzJDRjk3
NUExNkNFQzcxNDAwNTRFOTlEIC8qIEpTQ29udGV4dEJhY2tGb3J3YXJkQ2FjaGUyLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNo
YXJhY3RlcnMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkzNzkwMjhCOTE0RkFDMjRD
MDA3RTZCNDMgLyogYWNjZXB0c0ZpcnN0TW91c2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQlCNTVGMTFCRTE1MTkxQTA2MDA5MTU5MTYgLyogQWhlbS50dGYgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCkBAIC00NTYsNiArNDYxLDkgQEAKIAkJQzBCRDY2OUUxMzFEM0NGRjAwRTE4RjJBIC8q
IFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVuZGxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJl
RWFybHlfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUQzQkMx
NDU5OEI2RjAwQTgwMkE2IC8qIEdldEJhY2tpbmdTY2FsZUZhY3Rvci5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdldEJhY2tpbmdTY2FsZUZhY3Rvci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBDNUQzQkQxNDU5OEI2RjAwQTgwMkE2IC8qIEdl
dEJhY2tpbmdTY2FsZUZhY3Rvcl9CdW5kbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBHZXRCYWNraW5nU2NhbGVGYWN0b3JfQnVuZGxlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkNGOTc1ODE2Q0VDNjlFMDA1NEU5OUQgLyogSlNDb250ZXh0
QmFja0ZvcndhcmRDYWNoZTEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IEpTQ29u
dGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyQ0Y5NzU5MTZDRUM2OUUwMDU0RTk5RCAvKiBKU0NvbnRleHRCYWNrRm9yd2FyZENhY2hlMi5o
dG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSlNDb250ZXh0QmFja0ZvcndhcmRDYWNo
ZTIuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJFQjJERDExNkNBQzdBQzAw
OUI1MkVFIC8qIFdlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0
Q29udGV4dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUwN0U4QTYxNEM2NTQ1
QjAwNUQ2QjNCIC8qIEluc3BlY3RvckJhci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEluc3BlY3RvckJhci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzUxQUZCOTgxNjlGNDlGRjAwOUNDRjY2IC8qIEZpbmRNYXRjaGVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRmluZE1hdGNoZXMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM1NDBGNzc1MTUyRTREQTAwMEE0MEM4QyAvKiBTaW1wbGlmeU1h
cmt1cC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbXBsaWZ5
TWFya3VwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODE3LDYgKzgyNSw3IEBA
CiAJCQkJNTFGQkJCNEMxNTEzRDRFOTAwODIyNzM4IC8qIFdlYlZpZXdDYW5QYXN0ZVVSTC5tbSAq
LywKIAkJCQkzN0UzOEMzMzE2OUI3RDAxMDA4NEMyOEMgLyogV2ViVmlld0RpZFJlbW92ZUZyYW1l
RnJvbUhpZXJhcmNoeS5tbSAqLywKIAkJCQlBNUUyMDI3MjE1QjIxODE5MDBDMTNFMTQgLyogV2lu
ZG93bGVzc1dlYlZpZXdXaXRoTWVkaWEubW0gKi8sCisJCQkJQzJFQjJERDExNkNBQzdBQzAwOUI1
MkVFIC8qIFdlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbSAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTgyNCw2ICs4MzMs
OCBAQAogCQlDMDdFNkNCMDEzRkQ3MzdDMDAzOEIyMkIgLyogUmVzb3VyY2VzICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDMkNGOTc1ODE2Q0VDNjlFMDA1
NEU5OUQgLyogSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTEuaHRtbCAqLywKKwkJCQlDMkNGOTc1
OTE2Q0VDNjlFMDA1NEU5OUQgLyogSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTIuaHRtbCAqLywK
IAkJCQkzNzkwMjhCODE0RkFCRTQ5MDA3RTZCNDMgLyogYWNjZXB0c0ZpcnN0TW91c2UuaHRtbCAq
LywKIAkJCQlCNTVGMTFCOTE1MTkxNkU2MDA5MTU5MTYgLyogQWhlbS50dGYgKi8sCiAJCQkJQjU1
RjExQjAxNTE3QTJDNDAwOTE1OTE2IC8qIGF0dHJpYnV0ZWRTdHJpbmdDdXN0b21Gb250Lmh0bWwg
Ki8sCkBAIC05MzMsNiArOTQ0LDggQEAKIC8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwog
CQkwOEZCNzc5M0ZFODQxNTVEQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlp
c2EgPSBQQlhQcm9qZWN0OworCQkJYXR0cmlidXRlcyA9IHsKKwkJCX07CiAJCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMURFQjkyNzgwODczM0RENDAwMTBFOUNEIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiVGVzdFdlYktpdEFQSSIgKi87CiAJCQljb21wYXRp
YmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOwogCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmds
aXNoOwpAQCAtMTAwOCw2ICsxMDIxLDcgQEAKIAkJCQk0QkZERkZBOTEzMTQ3Nzc3MDA2MUYyNEIg
LyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUI0RjhG
QTQxNTlENTJCMTAwMkQ5Rjk0IC8qIEhUTUxDb2xsZWN0aW9uTmFtZWRJdGVtLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOUIyNkZDNkMxNTlEMDYxMDAwQ0MzNzY1IC8qIEhUTUxGb3JtQ29sbGVjdGlv
bk5hbWVkSXRlbS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUMyRUIyREQzMTZDQUM3QUMwMDlCNTJF
RSAvKiBXZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0gaW4gU291cmNlcyAqLywK
IAkJCQlCQzU3NUFBRDEyNkU4M0I5MDA2RjBGMTIgLyogSW5qZWN0ZWRCdW5kbGVCYXNpYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzNzhFNjQ3MzE2MzI2NDZEMDBCNkM2NzYgLyogSW5qZWN0ZWRC
dW5kbGVGcmFtZUhpdFRlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjY2MEFBMTMxNUE2MTlD
OTAwM0ExMjQzIC8qIEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNr
V2lucy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
bWFjL0pTQ29udGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTEuaHRtbAko
cmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL0pTQ29udGV4dEJh
Y2tGb3J3YXJkQ2FjaGUxLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorPGJv
ZHk+CisgICAgPGRpdiBpZD0idGVzdC1kaXYiPjwvZGl2PgorICAgIDxzY3JpcHQ+CisgICAgICAg
IHZhciB0ZXN0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QtZGl2Iik7CisgICAg
ICAgIGlmICghdGVzdERpdi5teUN1c3RvbVByb3BlcnR5KQorICAgICAgICAgICAgaW5zZXJ0TXlD
dXN0b21Qcm9wZXJ0eSh0ZXN0RGl2KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2hlY2tG
b3JNeUN1c3RvbVByb3BlcnR5KHRlc3REaXYpOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvSlNDb250ZXh0QmFja0ZvcndhcmRDYWNo
ZTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9KU0Nv
bnRleHRCYWNrRm9yd2FyZENhY2hlMi5odG1sCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9tYWMvSlNDb250ZXh0QmFja0ZvcndhcmRDYWNoZTIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0LWRpdiI+
PC9kaXY+CisgICAgPHNjcmlwdD4KKyAgICAgICAgdmFyIHRlc3REaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgidGVzdC1kaXYiKTsKKyAgICAgICAgaWYgKHRlc3REaXYubXlDdXN0b21Qcm9w
ZXJ0eSkKKyAgICAgICAgICAgIG15Q29uc29sZS5sb2coIkVSUk9SOiBmb3VuZCBteUN1c3RvbVBy
b3BlcnR5LiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkaWRDb21wbGV0ZVRlc3RTdWNj
ZXNzZnVsbHkoKTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvbWFjL1dlYlZpZXdEaWRDcmVhdGVKYXZhU2NyaXB0Q29udGV4dC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL21hYy9XZWJWaWV3RGlkQ3JlYXRl
SmF2YVNjcmlwdENvbnRleHQubW0JKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL21hYy9XZWJWaWV3RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U0V4cG9ydC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitAY2xhc3MgTXlDb25zb2xl
OworCitzdGF0aWMgYm9vbCBkaWRGaW5pc2hMb2FkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBkaWRD
b21wbGV0ZVRlc3RTdWNjZXNzZnVsbHkgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpZENhbGxXaW5k
b3dDYWxsYmFjayA9IGZhbHNlOworc3RhdGljIGJvb2wgZGlkRmluZE15Q3VzdG9tUHJvcGVydHkg
PSBmYWxzZTsKK3N0YXRpYyBib29sIGRpZEluc2VydE15Q3VzdG9tUHJvcGVydHkgPSB0cnVlOwor
CitAcHJvdG9jb2wgTXlDb25zb2xlPEpTRXhwb3J0PgorLSAodm9pZClsb2c6KE5TU3RyaW5nICop
czsKKy0gKHZvaWQpcHJpbnRIZWxsb1dvcmxkOworLSAoaW50KWFkZDooaW50KWEgdG86KGludCli
OworQGVuZAorCitAaW50ZXJmYWNlIE15Q29uc29sZSA6IE5TT2JqZWN0PE15Q29uc29sZT4KK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIE15Q29uc29sZQorLSAodm9pZClsb2c6KE5TU3RyaW5nICop
cworeworICAgIE5TTG9nKEAiJUAiLCBzKTsKK30KKworLSAodm9pZClwcmludEhlbGxvV29ybGQK
K3sKKyAgICBOU0xvZyhAIkhlbGxvLCBXb3JsZCEiKTsKK30KKworLSAoaW50KWFkZDooaW50KWEg
dG86KGludCliCit7CisgICAgcmV0dXJuIGEgKyBiOworfQorQGVuZAorCitAaW50ZXJmYWNlIERp
ZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGUgOiBOU09iamVjdAorQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRGcmFtZUxvYWRE
ZWxlZ2F0ZQorCistICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZGlkRmluaXNoTG9h
ZEZvckZyYW1lOihXZWJGcmFtZSAqKWZyYW1lCit7CisgICAgZGlkRmluaXNoTG9hZCA9IHRydWU7
Cit9CisKKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgZGlkQ3JlYXRlSmF2YVNj
cmlwdENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZm9yRnJhbWU6KFdlYkZyYW1lICopZnJh
bWUKK3sKKyAgICBNeUNvbnNvbGUgKm15Q29uc29sZSA9IFtbTXlDb25zb2xlIGFsbG9jXSBpbml0
XTsKKyAgICBjb250ZXh0W0AibXlDb25zb2xlIl0gPSBteUNvbnNvbGU7CisgICAgY29udGV4dC5l
eGNlcHRpb25IYW5kbGVyID0gbmlsOworICAgIFtteUNvbnNvbGUgcmVsZWFzZV07CisKKyAgICBj
b250ZXh0W0Aid2luZG93Q2FsbGJhY2siXSA9IF4oSlNWYWx1ZSAqdGhpc09iamVjdCl7CisgICAg
ICAgIGRpZENhbGxXaW5kb3dDYWxsYmFjayA9IHRydWU7CisgICAgfTsKKworICAgIGNvbnRleHRb
QCJkaWRDb21wbGV0ZVRlc3RTdWNjZXNzZnVsbHkiXSA9IF57CisgICAgICAgIGRpZENvbXBsZXRl
VGVzdFN1Y2Nlc3NmdWxseSA9IHRydWU7CisgICAgfTsKKworICAgIGNvbnRleHRbQCJjYWxsTWVC
YWNrIl0gPSBeKEpTVmFsdWUgKmZ1bmN0aW9uVmFsdWUpIHsKKyAgICAgICAgW2Z1bmN0aW9uVmFs
dWUgY2FsbFdpdGhBcmd1bWVudHM6W05TQXJyYXkgYXJyYXldXTsKKyAgICB9OworCisgICAgY29u
dGV4dFtAImNoZWNrRm9yTXlDdXN0b21Qcm9wZXJ0eSJdID0gXihKU1ZhbHVlICplbGVtZW50KSB7
CisgICAgICAgIGlmIChbZWxlbWVudCBoYXNQcm9wZXJ0eTpAIm15Q3VzdG9tUHJvcGVydHkiXSAm
JiBbW2VsZW1lbnQgdmFsdWVGb3JQcm9wZXJ0eTpAIm15Q3VzdG9tUHJvcGVydHkiXSB0b0ludDMy
XSA9PSA0MikKKyAgICAgICAgICAgIGRpZEZpbmRNeUN1c3RvbVByb3BlcnR5ID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgTlNMb2coQCJFUlJPUjogRGlkIG5vdCBmaW5kIG15Q3Vz
dG9tUHJvcGVydHkuIik7CisgICAgfTsKKworICAgIF9fYmxvY2sgSlNDb250ZXh0ICp0ZW1wQ29u
dGV4dCA9IGNvbnRleHQ7CisgICAgY29udGV4dFtAImluc2VydE15Q3VzdG9tUHJvcGVydHkiXSA9
IF4oSlNWYWx1ZSAqZWxlbWVudCkgeworICAgICAgICBKU1ZhbHVlICpmb3J0eVR3byA9IFtKU1Zh
bHVlIHZhbHVlV2l0aEludDMyOjQyIGluQ29udGV4dDp0ZW1wQ29udGV4dF07CisgICAgICAgIFtl
bGVtZW50IHNldFZhbHVlOmZvcnR5VHdvIGZvclByb3BlcnR5OkAibXlDdXN0b21Qcm9wZXJ0eSJd
OworICAgICAgICBkaWRJbnNlcnRNeUN1c3RvbVByb3BlcnR5ID0gdHJ1ZTsKKyAgICB9OworfQor
CitAZW5kCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChXZWJLaXQxLCBEaWRD
cmVhdGVKYXZhU2NyaXB0Q29udGV4dFNhbml0eTEpCit7CisgICAgZGlkRmluaXNoTG9hZCA9IGZh
bHNlOworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBSZXRhaW5QdHI8V2ViVmlldz4g
d2ViVmlldyA9IGFkb3B0TlMoW1tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgMTIwLCAyMDApIGZyYW1lTmFtZTpuaWwgZ3JvdXBOYW1lOm5pbF0pOworICAgICAg
ICBSZXRhaW5QdHI8RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZT4g
ZnJhbWVMb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRG
cmFtZUxvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworCisgICAgICAgIHdlYlZpZXcuZ2V0KCku
ZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0ZS5nZXQoKTsKKyAgICAgICAgV2Vi
RnJhbWUgKm1haW5GcmFtZSA9IHdlYlZpZXcuZ2V0KCkubWFpbkZyYW1lOworCisgICAgICAgIE5T
U3RyaW5nICpib2R5U3RyaW5nID0gCisgICAgICAgICAgICBAIjxib2R5PiBcCisgICAgICAgICAg
ICAgICAgPHNjcmlwdD4gXAorICAgICAgICAgICAgICAgICAgICBteUNvbnNvbGUucHJpbnRIZWxs
b1dvcmxkKCk7IFwKKyAgICAgICAgICAgICAgICAgICAgbXlDb25zb2xlLmxvZyhcIkxvYWRlZCBj
dXN0b20gc3R1ZmYuXCIpOyBcCisgICAgICAgICAgICAgICAgICAgIG15Q29uc29sZS5sb2cobXlD
b25zb2xlLmFkZFRvKDQwLCAyKSk7IFwKKyAgICAgICAgICAgICAgICAgICAgZGlkQ29tcGxldGVU
ZXN0U3VjY2Vzc2Z1bGx5KCk7IFwKKyAgICAgICAgICAgICAgICA8L3NjcmlwdD4gXAorICAgICAg
ICAgICAgPC9ib2R5PiI7CisgICAgICAgIE5TVVJMICphYm91dEJsYW5rVVJMID0gW05TVVJMIFVS
TFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdOworCisgICAgICAgIFttYWluRnJhbWUgbG9hZEhU
TUxTdHJpbmc6Ym9keVN0cmluZyBiYXNlVVJMOmFib3V0QmxhbmtVUkxdOworICAgICAgICBVdGls
OjpydW4oJmRpZENvbXBsZXRlVGVzdFN1Y2Nlc3NmdWxseSk7CisgICAgfQorfQorCitURVNUKFdl
YktpdDEsIERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0U2FuaXR5MikKK3sKKyAgICBkaWRDYWxs
V2luZG93Q2FsbGJhY2sgPSBmYWxzZTsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
UmV0YWluUHRyPFdlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDEyMCwgMjAwKSBmcmFtZU5hbWU6bmlsIGdyb3Vw
TmFtZTpuaWxdKTsKKyAgICAgICAgUmV0YWluUHRyPERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0
RnJhbWVMb2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0RpZENyZWF0
ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAg
ICAgICB3ZWJWaWV3LmdldCgpLmZyYW1lTG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGUu
Z2V0KCk7CisgICAgICAgIFdlYkZyYW1lICptYWluRnJhbWUgPSB3ZWJWaWV3LmdldCgpLm1haW5G
cmFtZTsKKworICAgICAgICBOU1N0cmluZyAqYm9keVN0cmluZyA9IAorICAgICAgICAgICAgQCI8
Ym9keT4gXAorICAgICAgICAgICAgICAgIDxzY3JpcHQ+IFwKKyAgICAgICAgICAgICAgICAgICAg
c2V0VGltZW91dCh3aW5kb3dDYWxsYmFjaywgMTAwKTsgXAorICAgICAgICAgICAgICAgIDwvc2Ny
aXB0PiBcCisgICAgICAgICAgICA8L2JvZHk+IjsKKyAgICAgICAgTlNVUkwgKmFib3V0QmxhbmtV
UkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl07CisKKyAgICAgICAgW21h
aW5GcmFtZSBsb2FkSFRNTFN0cmluZzpib2R5U3RyaW5nIGJhc2VVUkw6YWJvdXRCbGFua1VSTF07
CisgICAgICAgIFV0aWw6OnJ1bigmZGlkQ2FsbFdpbmRvd0NhbGxiYWNrKTsKKyAgICB9Cit9CisK
K1RFU1QoV2ViS2l0MSwgRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRDYWxsSlNGdW5jdGlvbkZy
b21PYmpDQ2FsbGJhY2tUZXN0KQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBS
ZXRhaW5QdHI8V2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMTIwLCAyMDApIGZyYW1lTmFtZTpuaWwgZ3JvdXBO
YW1lOm5pbF0pOworICAgICAgICBSZXRhaW5QdHI8RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRG
cmFtZUxvYWREZWxlZ2F0ZT4gZnJhbWVMb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbRGlkQ3JlYXRl
SmF2YVNjcmlwdENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworCisgICAg
ICAgIHdlYlZpZXcuZ2V0KCkuZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0ZS5n
ZXQoKTsKKyAgICAgICAgV2ViRnJhbWUgKm1haW5GcmFtZSA9IHdlYlZpZXcuZ2V0KCkubWFpbkZy
YW1lOworCisgICAgICAgIE5TU3RyaW5nICpib2R5U3RyaW5nID0gCisgICAgICAgICAgICBAIjxi
b2R5PiBcCisgICAgICAgICAgICAgICAgPHNjcmlwdD4gXAorICAgICAgICAgICAgICAgICAgICBj
YWxsTWVCYWNrKGZ1bmN0aW9uKCkgeyBcCisgICAgICAgICAgICAgICAgICAgICAgICBkaWRDb21w
bGV0ZVRlc3RTdWNjZXNzZnVsbHkoKTsgXAorICAgICAgICAgICAgICAgICAgICB9KTsgXAorICAg
ICAgICAgICAgICAgIDwvc2NyaXB0PiBcCisgICAgICAgICAgICA8L2JvZHk+IjsKKyAgICAgICAg
TlNVUkwgKmFib3V0QmxhbmtVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFib3V0OmJsYW5r
Il07CisKKyAgICAgICAgW21haW5GcmFtZSBsb2FkSFRNTFN0cmluZzpib2R5U3RyaW5nIGJhc2VV
Ukw6YWJvdXRCbGFua1VSTF07CisgICAgICAgIFV0aWw6OnJ1bigmZGlkQ29tcGxldGVUZXN0U3Vj
Y2Vzc2Z1bGx5KTsKKyAgICB9Cit9CisKK1RFU1QoV2ViS2l0MSwgRGlkQ3JlYXRlSmF2YVNjcmlw
dENvbnRleHRBZGRDdXN0b21Qcm9wZXJ0aWVzRnJvbUpTVGVzdCkKK3sKKyAgICBkaWRGaW5kTXlD
dXN0b21Qcm9wZXJ0eSA9IGZhbHNlOworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBS
ZXRhaW5QdHI8V2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMTIwLCAyMDApIGZyYW1lTmFtZTpuaWwgZ3JvdXBO
YW1lOm5pbF0pOworICAgICAgICBSZXRhaW5QdHI8RGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRG
cmFtZUxvYWREZWxlZ2F0ZT4gZnJhbWVMb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbRGlkQ3JlYXRl
SmF2YVNjcmlwdENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworCisgICAg
ICAgIHdlYlZpZXcuZ2V0KCkuZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0ZS5n
ZXQoKTsKKyAgICAgICAgV2ViRnJhbWUgKm1haW5GcmFtZSA9IHdlYlZpZXcuZ2V0KCkubWFpbkZy
YW1lOworCisgICAgICAgIE5TU3RyaW5nICpib2R5U3RyaW5nID0gCisgICAgICAgIEAiPGJvZHk+
IFwKKyAgICAgICAgICAgIDxkaXYgaWQ9XCJ0ZXN0LWRpdlwiPjwvZGl2PiBcCisgICAgICAgICAg
ICA8c2NyaXB0PiBcCisgICAgICAgICAgICAgICAgdmFyIHRlc3REaXYgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChcInRlc3QtZGl2XCIpOyBcCisgICAgICAgICAgICAgICAgdGVzdERpdi5teUN1
c3RvbVByb3BlcnR5ID0gNDI7IFwKKyAgICAgICAgICAgICAgICBjaGVja0Zvck15Q3VzdG9tUHJv
cGVydHkodGVzdERpdik7IFwKKyAgICAgICAgICAgIDwvc2NyaXB0PiBcCisgICAgICAgIDwvYm9k
eT4iOworICAgICAgICBOU1VSTCAqYWJvdXRCbGFua1VSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiYWJvdXQ6YmxhbmsiXTsKKworICAgICAgICBbbWFpbkZyYW1lIGxvYWRIVE1MU3RyaW5nOmJv
ZHlTdHJpbmcgYmFzZVVSTDphYm91dEJsYW5rVVJMXTsKKyAgICAgICAgVXRpbDo6cnVuKCZkaWRG
aW5kTXlDdXN0b21Qcm9wZXJ0eSk7CisgICAgfQorfQorCitURVNUKFdlYktpdDEsIERpZENyZWF0
ZUphdmFTY3JpcHRDb250ZXh0QWRkQ3VzdG9tUHJvcGVydGllc0Zyb21PYmpDVGVzdCkKK3sKKyAg
ICBkaWRGaW5kTXlDdXN0b21Qcm9wZXJ0eSA9IGZhbHNlOworICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworICAgICAgICBSZXRhaW5QdHI8V2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMTIwLCAyMDApIGZyYW1lTmFt
ZTpuaWwgZ3JvdXBOYW1lOm5pbF0pOworICAgICAgICBSZXRhaW5QdHI8RGlkQ3JlYXRlSmF2YVNj
cmlwdENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZT4gZnJhbWVMb2FkRGVsZWdhdGUgPSBhZG9wdE5T
KFtbRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRGcmFtZUxvYWREZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworCisgICAgICAgIHdlYlZpZXcuZ2V0KCkuZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxv
YWREZWxlZ2F0ZS5nZXQoKTsKKyAgICAgICAgV2ViRnJhbWUgKm1haW5GcmFtZSA9IHdlYlZpZXcu
Z2V0KCkubWFpbkZyYW1lOworCisgICAgICAgIE5TU3RyaW5nICpib2R5U3RyaW5nID0gCisgICAg
ICAgICAgICBAIjxib2R5PiBcCisgICAgICAgICAgICAgICAgPGRpdiBpZD1cInRlc3QtZGl2XCI+
PC9kaXY+IFwKKyAgICAgICAgICAgICAgICA8c2NyaXB0PiBcCisgICAgICAgICAgICAgICAgICAg
IHZhciB0ZXN0RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXN0LWRpdlwiKTsgXAor
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRNeUN1c3RvbVByb3BlcnR5KHRlc3REaXYpOyBcCisg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0RGl2Lm15Q3VzdG9tUHJvcGVydHkgPT09IDQyKSB7
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yTXlDdXN0b21Qcm9wZXJ0eSh0ZXN0
RGl2KTsgXAorICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICA8L3Njcmlw
dD4gXAorICAgICAgICAgICAgPC9ib2R5PiI7CisgICAgICAgIE5TVVJMICphYm91dEJsYW5rVVJM
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdOworCisgICAgICAgIFttYWlu
RnJhbWUgbG9hZEhUTUxTdHJpbmc6Ym9keVN0cmluZyBiYXNlVVJMOmFib3V0QmxhbmtVUkxdOwor
ICAgICAgICBVdGlsOjpydW4oJmRpZEZpbmRNeUN1c3RvbVByb3BlcnR5KTsKKyAgICB9Cit9CisK
K1RFU1QoV2ViS2l0MSwgRGlkQ3JlYXRlSmF2YVNjcmlwdENvbnRleHRCYWNrRm9yd2FyZENhY2hl
VGVzdCkKK3sKKyAgICBkaWRJbnNlcnRNeUN1c3RvbVByb3BlcnR5ID0gZmFsc2U7CisgICAgZGlk
RmluZE15Q3VzdG9tUHJvcGVydHkgPSBmYWxzZTsKKyAgICBkaWRDb21wbGV0ZVRlc3RTdWNjZXNz
ZnVsbHkgPSBmYWxzZTsKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgUmV0YWluUHRy
PFdlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDEyMCwgMjAwKSBmcmFtZU5hbWU6bmlsIGdyb3VwTmFtZTpuaWxd
KTsKKyAgICAgICAgUmV0YWluUHRyPERpZENyZWF0ZUphdmFTY3JpcHRDb250ZXh0RnJhbWVMb2Fk
RGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlID0gYWRvcHROUyhbW0RpZENyZWF0ZUphdmFTY3Jp
cHRDb250ZXh0RnJhbWVMb2FkRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKworICAgICAgICB3ZWJW
aWV3LmdldCgpLmZyYW1lTG9hZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGUuZ2V0KCk7Cisg
ICAgICAgIFdlYkZyYW1lICptYWluRnJhbWUgPSB3ZWJWaWV3LmdldCgpLm1haW5GcmFtZTsKKwor
ICAgICAgICBOU1VSTCAqdXJsMSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJKU0NvbnRleHRCYWNrRm9yd2FyZENhY2hlMSIgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEV4dGVuc2lvbjpAImh0bWwiIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdOworICAgICAgICBbbWFpbkZyYW1lIGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dXJsMV1dOworICAgICAgICBVdGlsOjpydW4oJmRp
ZEluc2VydE15Q3VzdG9tUHJvcGVydHkpOworCisgICAgICAgIE5TVVJMICp1cmwyID0gW1tOU0J1
bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkpTQ29udGV4dEJhY2tGb3J3YXJkQ2Fj
aGUyIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRo
RXh0ZW5zaW9uOkAiaHRtbCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisgICAg
ICAgIFttYWluRnJhbWUgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp1
cmwyXV07CisgICAgICAgIFV0aWw6OnJ1bigmZGlkQ29tcGxldGVUZXN0U3VjY2Vzc2Z1bGx5KTsK
KworICAgICAgICBkaWRDb21wbGV0ZVRlc3RTdWNjZXNzZnVsbHkgPSBmYWxzZTsKKyAgICAgICAg
W1ttYWluRnJhbWUgamF2YVNjcmlwdENvbnRleHRdIGV2YWx1YXRlU2NyaXB0OgorICAgICAgICAg
ICAgQCJ2YXIgdGVzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdC1kaXZcIik7
IFwKKyAgICAgICAgICAgIGlmICghdGVzdERpdi5teUN1c3RvbVByb3BlcnR5KSB7IFwKKyAgICAg
ICAgICAgICAgICBkaWRDb21wbGV0ZVRlc3RTdWNjZXNzZnVsbHkoKTsgXAorICAgICAgICAgICAg
fSJdOworICAgICAgICBFWFBFQ1RfVFJVRShkaWRDb21wbGV0ZVRlc3RTdWNjZXNzZnVsbHkpOwor
CisgICAgICAgIGlmIChbd2ViVmlldy5nZXQoKSBnb0JhY2tdKSB7CisgICAgICAgICAgICBbW21h
aW5GcmFtZSBqYXZhU2NyaXB0Q29udGV4dF0gZXZhbHVhdGVTY3JpcHQ6CisgICAgICAgICAgICAg
ICAgQCJ2YXIgdGVzdERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGVzdC1kaXZcIik7
IFwKKyAgICAgICAgICAgICAgICBjaGVja0Zvck15Q3VzdG9tUHJvcGVydHkodGVzdERpdik7Il07
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShkaWRGaW5kTXlDdXN0b21Qcm9wZXJ0eSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgRVhQRUNUX1RSVUUoZmFsc2UpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKEpTQ19PQkpD
X0FQSSkK
</data>
<flag name="review"
          id="209751"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>