<?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>28890</bug_id>
          
          <creation_ts>2009-09-01 14:59:57 -0700</creation_ts>
          <short_desc>Make simple user script injection work</short_desc>
          <delta_ts>2009-09-10 07:39:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>aa</cc>
    
    <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>144006</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-09-01 14:59:57 -0700</bug_when>
    <thetext>This bug is covering the initial landing of basic user content support.  It has lots of issues, but the basic structure and WebKit API are defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144007</commentid>
    <comment_count>1</comment_count>
      <attachid>38888</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-09-01 15:00:52 -0700</bug_when>
    <thetext>Created attachment 38888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144008</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-01 15:03:49 -0700</bug_when>
    <thetext>This patch is missing the HTML for the test.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144009</commentid>
    <comment_count>3</comment_count>
      <attachid>38889</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-09-01 15:08:08 -0700</bug_when>
    <thetext>Created attachment 38889
Include test and DRT changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144011</commentid>
    <comment_count>4</comment_count>
      <attachid>38888</attachid>
    <who name="Aaron Boodman">aa</who>
    <bug_when>2009-09-01 15:17:02 -0700</bug_when>
    <thetext>Comment on attachment 38888
Patch

&gt;  void FrameLoader::dispatchDocumentElementAvailable()
&gt;  {
&gt; +    m_frame-&gt;injectPageGroupUserContent(InjectContentAtDocumentStart);
&gt;      m_client-&gt;documentElementAvailable();
&gt;  }

FYI, I&apos;ve noticed some flakiness of when this is dispatched. In some cases it
happens after more of the document is available than just the document node. I
have not had time to investigate yet. Ideally, it should be dispatched
*exactly* after the document element is available, but before anything else is
attached to it.

&gt; @@ -66,6 +67,11 @@ namespace WebCore {
&gt;          StorageNamespace* localStorage();
&gt;  #endif
&gt;  
&gt; +        void addUserContent(const String&amp; source, const KURL&amp;, const String&amp; mimeType, const Vector&lt;String&gt;&amp; patterns,
&gt; +                            const String&amp; contentID, UserContentInjectTime);
&gt; +        void removeUserContent() { m_userContent.clear(); }
&gt; +        const Vector&lt;UserContent&gt;&amp; userContent() const { return m_userContent; }

Maybe clearUserContent() instead of removeUserContent()? To me, &quot;remove&quot;
implies removing a single entry.

Also, fyi, in Chromium, extensions can be installed and uninstalled without
restarting the browser, so this API will require us clearing and the list and
repopulating it. That might be OK since uninstallation is uncommon, just wanted
you to be aware of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144020</commentid>
    <comment_count>5</comment_count>
      <attachid>38889</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-09-01 15:54:12 -0700</bug_when>
    <thetext>Comment on attachment 38889
Include test and DRT changes

&gt; +    if (userContent.isCSSStylesheet())
&gt; +        injectUserStylesheet(userContent);
&gt; +    else if (userContent.isJavascript())

That should be &quot;isJavaScript&quot;.

&gt; +void PageGroup::addUserContent(const String&amp; source, const KURL&amp; url, const String&amp; mimeType,
&gt; +                               const Vector&lt;String&gt;&amp; patterns, const String&amp; contentID,
&gt; +                               UserContentInjectTime injectTime)
&gt; +{
&gt; +    m_userContent.append(UserContent(source, url, mimeType, patterns, contentID, injectTime));
&gt; +}

As we discussed, &quot;worldID&quot; seems like a better term than &quot;contentID&quot;.

&gt; +    UserContent(const String&amp; source, const KURL&amp; url, const String&amp; mimeType,
&gt; +                const Vector&lt;String&gt;&amp; patterns, const String&amp; contentID,
&gt; +                UserContentInjectTime injectTime)
&gt; +    : m_source(source)
&gt; +    , m_url(url)
&gt; +    , m_mimeType(mimeType)
&gt; +    , m_patterns(patterns)
&gt; +    , m_contentID(contentID)
&gt; +    , m_injectTime(injectTime)
&gt; +    {
&gt; +    }

The initializer list should be indented.

It&apos;s a little too bad that this will copy the patterns Vector. You could add a static constructor function that has the word &quot;adopt&quot; in it somewhere, but it&apos;s hard to see how to make that clear given all the parameters this constructor takes. Or you could make this constructor take a PassOwnPtr&lt;Vector&lt;String&gt; &gt;.

&gt; +    UserContentInjectTime injectTime() const { return m_injectTime; }

I think &quot;UserContentInjectionTime&quot; and &quot;injectionTime&quot; and &quot;m_injectionTime&quot; would be a little better.

&gt; +    bool isCSSStylesheet() const { return mimeType() == &quot;text/css&quot;; }
&gt; +    bool isJavascript() const { return mimeType() == &quot;text/javascript&quot;; }

Are MIME types case-sensitive? RFC2045 seems to say that they aren&apos;t.

It seems expensive to do a string comparison every time. Can we just have a UserContentType enum instead?

&gt; +    PageGroup* pageGroup = PageGroup::pageGroup(group);
&gt; +    ASSERT(pageGroup);
&gt; +    if (!pageGroup)
&gt; +        return;

I guess this assertion might be helpful for WebKit clients that are using a Debug build of WebKit for development, but it doesn&apos;t seem like a true &quot;assertion&quot; in the sense of being something WebKit can guarantee. Maybe a LOG_ERROR would be better? (This same comment applies to +_removeUserContentFromGroup:).

&gt; +    // Convert the patterns into a Vector.
&gt; +    Vector&lt;String&gt; patternsVector;
&gt; +    for (unsigned i = 0; i &lt; [patterns count]; ++i) {
&gt; +        if ([[patterns objectAtIndex:i] isKindOfClass:[NSString class]])
&gt; +            patternsVector.append(String((NSString*)[patterns objectAtIndex:i]));
&gt; +    }

It would be better to call -count only once, and to call -objectAtIndex: only once per loop iteration.

&gt; +    pageGroup-&gt;addUserContent(source, url, mimeType, patternsVector, contentID, (UserContentInjectTime)injectTime);

It would be nice not to rely on UserContentInjectTime and WebUserContentInjectTime having the same values.

&gt; +typedef enum {
&gt; +    WebInjectAtDocumentStart,
&gt; +    WebInjectAtDocumentEnd,
&gt; +} WebUserContentInjectTime;
&gt; +

I think WebUserContentInjectionTime would be a better name. (The parameter to +_addUserContentToGroup: should probably be renamed, too.)

You&apos;ll need to add your new test to all the non-Mac Skipped files.

Here are some ideas for more tests:
* test InjectAtDocumentStart
* test that scripts run in iframes
* test that scripts run after navigations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144067</commentid>
    <comment_count>6</comment_count>
      <attachid>38889</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-01 17:26:21 -0700</bug_when>
    <thetext>Comment on attachment 38889
Include test and DRT changes

If I were writing this patch, I&apos;d have two subclasses of UserContent, one for CSS and once for JavaScript.  Then you wouldn&apos;t have bizarre semantics like ignoring the injection time for a mimeType of text/css.  Also Frame::injectUserContent wouldn&apos;t have to do fake RTTI to do the injection.  We could just use a virtual function like Stroustrup intended.

Also, I wish we had a better representation of a pattern than a string, but we can address that in the patch that implements patterns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144269</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-09-02 12:50:38 -0700</bug_when>
    <thetext>Yeah I definitely think subclassing would be good here.... then we could keep aroben&apos;s suggested type enum only at the API level, and just go ahead and make UserScripts or UserStyleSheets to hand off to the PageGroup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144607</commentid>
    <comment_count>8</comment_count>
      <attachid>39013</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-09-03 15:16:41 -0700</bug_when>
    <thetext>Created attachment 39013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144628</commentid>
    <comment_count>9</comment_count>
      <attachid>39013</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-09-03 16:09:10 -0700</bug_when>
    <thetext>Comment on attachment 39013
Patch

&gt; +void Frame::injectUserScriptsForWorld(int worldID, const UserScriptVector&amp; userScripts, UserScriptInjectionTime injectionTime)
&gt; +{
&gt; +    // Make a vector of script source codes.  Call evaluateInNewWorld on the set of scripts.
&gt; +    // FIXME: Need to implement pattern checking.
&gt; +    Vector&lt;ScriptSourceCode&gt; sourceCode;
&gt; +    unsigned count = userScripts.size();
&gt; +    if (count == 0)
&gt; +        return;

We normally use isEmpty() for this.

&gt; +    for (unsigned i = 0; i &lt; count; ++i) {
&gt; +        UserScript* script = userScripts[i].get();
&gt; +        if (script-&gt;injectionTime() == injectionTime)
&gt; +            sourceCode.append(ScriptSourceCode(script-&gt;source(), script-&gt;url()));
&gt; +    }
&gt; +    script()-&gt;evaluateInNewWorld(worldID, sourceCode);
&gt; +}

I think this will break the V8 build.

&gt; +void PageGroup::addUserScript(const String&amp; source, const KURL&amp; url, const Vector&lt;String&gt;&amp; patterns, 
&gt; +                              int worldID, UserScriptInjectionTime injectionTime)
&gt; +{
&gt; +    PassOwnPtr&lt;UserScript&gt; userScript(new UserScript(source, url, patterns, worldID, injectionTime));
&gt; +    UserScriptVector* scriptsInWorld;
&gt; +    if (!m_userScripts)
&gt; +        m_userScripts.set(new UserScriptMap);
&gt; +    scriptsInWorld = m_userScripts-&gt;get(worldID);
&gt; +    if (!scriptsInWorld)
&gt; +        scriptsInWorld = new UserScriptVector;
&gt; +    scriptsInWorld-&gt;append(userScript);
&gt; +    m_userScripts-&gt;set(worldID, scriptsInWorld);
&gt; +}

I think it would be slightly better for userScript to be an OwnPtr and then to pass userScript.release() to Vector::append. You can also save a hash lookup by writing this function like this:

OwnPtr&lt;UserScript&gt; userScript(...);
if (!m_userScripts)
    m_userScripts.set(...);
UserScriptVector*&amp; scriptsInWorld = m_userScripts.add(worldID, 0).first-&gt;second;
if (!scriptsInWorld)
    scriptsInWorld = new UserScriptVector;
scriptsInWorld-&gt;append(userScript.release());

&gt; +void PageGroup::removeUserContentForWorld(int worldID)
&gt; +{
&gt; +    if (m_userScripts) {
&gt; +        UserScriptVector* scriptsInWorld = m_userScripts-&gt;get(worldID);
&gt; +        if (scriptsInWorld) {
&gt; +            m_userScripts-&gt;remove(worldID);
&gt; +            delete scriptsInWorld;
&gt; +        }
&gt; +    }
&gt; +}

An early return would be nice. You can save a hash lookup by using HashMap::find instead of HashMap::get and passing the resulting iterator to HashMap::remove.

&gt; +    UserScript(const String&amp; source, const KURL&amp; url,
&gt; +               const Vector&lt;String&gt;&amp; patterns, int worldID,
&gt; +               UserScriptInjectionTime injectionTime)
&gt; +    : m_source(source)
&gt; +    , m_url(url)
&gt; +    , m_patterns(patterns)
&gt; +    , m_worldID(worldID)
&gt; +    , m_injectionTime(injectionTime)
&gt; +    {
&gt; +    }

The initializers should be indented.

It&apos;s still too bad that we&apos;re copying the patterns Vector here.

&gt; ++ (void)_addUserScriptToGroup:(NSString *)groupName source:(NSString *)source url:(NSURL *)url worldID:(int)worldID patterns:(NSArray *)patterns injectionTime:(WebUserScriptInjectionTime)injectionTime
&gt; +{
&gt; +    String group(groupName);
&gt; +    if (group.isEmpty())
&gt; +        return;
&gt; +    
&gt; +    PageGroup* pageGroup = PageGroup::pageGroup(group);
&gt; +    if (!pageGroup)
&gt; +        return;
&gt; +    
&gt; +    // Convert the patterns into a Vector.
&gt; +    Vector&lt;String&gt; patternsVector;
&gt; +    unsigned count = [patterns count];
&gt; +    for (unsigned i = 0; i &lt; count; ++i) {
&gt; +        if ([[patterns objectAtIndex:i] isKindOfClass:[NSString class]])
&gt; +            patternsVector.append(String((NSString*)[patterns objectAtIndex:i]));
&gt; +    }

It would be good to call -count only once, and -objectAtIndex: only once per iteration.

-count returns NSUInteger, which I think is 64 bits wide in 64-bit builds. I wonder if assigning it to an unsigned will break 64-bit builds?

You should probably add some comments and assertions about 0 not being a valid worldID.

I wonder if we should use a typedef for worldID?

The distinction between &quot;removeUserContent&quot; (which operates on a single world) and &quot;clearUserContent&quot; (which operates on all worlds) isn&apos;t super-clear to me from the names. Maybe &quot;clearUserContentForAllWorlds&quot; would be better?

You should try to add the new header files to as many build systems as you can.

Let&apos;s see some ChangeLogs!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144656</commentid>
    <comment_count>10</comment_count>
      <attachid>39024</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-09-03 17:57:14 -0700</bug_when>
    <thetext>Created attachment 39024
Patch that is ready for official review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144685</commentid>
    <comment_count>11</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-09-03 21:53:35 -0700</bug_when>
    <thetext>fyi, there are merge markers in WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144800</commentid>
    <comment_count>12</comment_count>
      <attachid>39024</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-09-04 07:01:08 -0700</bug_when>
    <thetext>Comment on attachment 39024
Patch that is ready for official review

&gt; +void ScriptController::evaluateInIsolatedWorld(int worldID, const Vector&lt;ScriptSourceCode&gt;&amp; sources)
&gt; +{
&gt; +    // FIXME: It&apos;s not obvious what extensionGroup is.  Does world ID represent the same concept? -- hyatt
&gt; +    m_proxy-&gt;evaluateInNewWorld(sources, worldID);
&gt; +}

I&apos;d like to get a V8-y person to look at his before you land.

&gt; +void Frame::injectUserScriptsForWorld(int worldID, const UserScriptVector&amp; userScripts, UserScriptInjectionTime injectionTime)
&gt; +{
&gt; +    if (userScripts.isEmpty())
&gt; +        return;
&gt; +
&gt; +    // FIXME: Need to implement pattern checking.
&gt; +    Vector&lt;ScriptSourceCode&gt; sourceCode;
&gt; +    unsigned count = userScripts.size();
&gt; +    if (count == 0)
&gt; +        return;

No need to check both isEmpty() and count == 0.

&gt; +void PageGroup::addUserScript(const String&amp; source, const KURL&amp; url, const Vector&lt;String&gt;&amp; patterns, 
&gt; +                              int worldID, UserScriptInjectionTime injectionTime)
&gt; +{
&gt; +    if (worldID &lt;= 0)
&gt; +        return;

If we don&apos;t allow negative worldIDs, maybe we should just use unsigned instead of int? Then the only disallowed value would be 0 (and I guess UINT_MAX, due to HashTable restrictions).

&gt; +void PageGroup::removeUserContentForWorld(int worldID)
&gt; +{
&gt; +    if (!m_userScripts)
&gt; +        return;
&gt; +
&gt; +    UserScriptMap::iterator it = m_userScripts-&gt;find(worldID);
&gt; +    if (it-&gt;second) {
&gt; +        m_userScripts-&gt;remove(it);
&gt; +        delete it-&gt;second;
&gt; +    }
&gt; +}

It&apos;s a little more standard to check &quot;if (it != m_userScripts-&gt;end())&quot;. That way even if we somehow screw up and end up with a null UserScriptVector* in the map, you&apos;ll still remove the entry.

I&apos;m still a little concerned about copying the patterns Vector in the UserScript constructor. Hopefully most scripts won&apos;t have too many patterns.

You need to add the new test to all the non-Mac Skipped files. You should add the new header files to all the build systems/project files you can. r=me if you do both of those things (and get a V8 person to look at the ScriptController change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144847</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-09-04 10:03:06 -0700</bug_when>
    <thetext>Fixed in r48057.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146196</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2009-09-10 07:39:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/7186923&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38888</attachid>
            <date>2009-09-01 15:00:52 -0700</date>
            <delta_ts>2009-09-01 15:17:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15729</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYsNiArNzQ2LDggQEAgX19aTjdXZWJDb3JlOVBhZ2VH
cm91cDE0YWRkVmlzaXRlZExpbmtFUAogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDE3Y2xvc2VMb2Nh
bFN0b3JhZ2VFdgogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDIxcmVtb3ZlQWxsVmlzaXRlZExpbmtz
RXYKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXAyNnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzRWIK
K19fWk43V2ViQ29yZTlQYWdlR3JvdXA5cGFnZUdyb3VwRVJLTlNfNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTlQYWdlR3JvdXAxNGFkZFVzZXJDb250ZW50RVJLTlNfNlN0cmluZ0VSS05TXzRLVVJMRVMz
X1JLTjNXVEY2VmVjdG9ySVMxX0xtMEVFRVMzX05TXzIxVXNlckNvbnRlbnRJbmplY3RUaW1lRQog
X19aTjdXZWJDb3JlOVRpbWVyQmFzZTRzdG9wRXYKIF9fWk43V2ViQ29yZTlUaW1lckJhc2U1c3Rh
cnRFZGQKIF9fWk43V2ViQ29yZTlUaW1lckJhc2VDMkV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDc3NzkpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzk1Myw2
ICszOTUzLDcgQEAKIAkJQkMxNDAyOEEwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMTQwMjg4MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5j
cHAgKi87IH07CiAJCUJDMTQwMjhCMEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMxNDAyODkwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggKi87
IH07CiAJCUJDMTdGOTY2MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MTdGOTY1MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCAq
LzsgfTsKKwkJQkMxOTVCNTkxMDQ3NEE3QjAwREI3QzdDIC8qIFVzZXJDb250ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE5NUI1ODEwNDc0QTdB
MDBEQjdDN0MgLyogVXNlckNvbnRlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQzFBMzdBRDA5N0M3MTVGMDAxOUYzRDggLyogRE9NLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzFBMzc5NzA5N0M3
MTVGMDAxOUYzRDggLyogRE9NLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkMxQTM3QUUwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMUEzNzk4MDk3QzcxNUYw
MDE5RjNEOCAvKiBET00ubW0gKi87IH07CiAJCUJDMUEzN0FGMDk3QzcxNUYwMDE5RjNEOCAvKiBE
T01Db3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzFBMzc5OTA5N0M3MTVGMDAxOUYzRDggLyogRE9NQ29yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04OTMyLDYgKzg5MzMsNyBAQAogCQlCQzE3
Rjk2NTBCNjRFQkI4MDA0QTY1Q0IgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTg4MUQ5MEUwOEM0RUQw
MDA0OEMxMyAvKiBGaWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGaWxlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxODgxREMwRTA4QzU0MzAwMDQ4QzEzIC8qIEZp
bGVMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGaWxlTGlzdC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMTk1QjU4MTA0NzRBN0EwMERCN0M3QyAvKiBVc2VyQ29u
dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzFBMzc5NzA5N0M3MTVGMDAxOUYzRDggLyog
RE9NLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET00uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxQTM3OTgwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET00ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMUEzNzk5MDk3QzcxNUYwMDE5RjNEOCAvKiBET01Db3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Db3JlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDg1OCw2ICsxMDg2MCw3IEBACiAJCQkJQkNEMEUwRjkw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oICovLAogCQkJCTE0QzlBNUU5
MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi8sCiAJCQkJRjU4Nzg2M0EwMkRFM0Ex
NDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi8sCisJCQkJQkMxOTVCNTgxMDQ3NEE3QTAwREI3QzdD
IC8qIFVzZXJDb250ZW50LmggKi8sCiAJCQkJNDk0QkQ3OTMwRjU1QzhFRTAwNzQ3ODI4IC8qIFdl
YktpdFBvaW50LmggKi8sCiAJCQkJNDk0QkQ3OTQwRjU1QzhFRTAwNzQ3ODI4IC8qIFdlYktpdFBv
aW50LmlkbCAqLywKIAkJCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVy
ZXMuY3BwICovLApAQCAtMTc1MjYsNiArMTc1MjksNyBAQAogCQkJCTQ5QzdCOUU2MTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEw
NDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QzdCQTAwMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQzE5NUI1OTEwNDc0QTdCMDBEQjdDN0MgLyogVXNlckNvbnRlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDc3NzkpCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDYsNiAr
MTIwNiw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmZpbmlzaGVkUGFyc2luZygpCiAgICAgaWYgKG1f
Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9m
cmFtZS0+aW5qZWN0UGFnZUdyb3VwVXNlckNvbnRlbnQoSW5qZWN0Q29udGVudEF0RG9jdW1lbnRF
bmQpOworCiAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIEZyYW1lJ3MgZGVzdHJ1
Y3RvciwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJ3QgcHJvdGVjdCBvdXJzZWx2ZXMKICAgICAv
LyBiZWNhdXNlIGRvaW5nIHNvIHdpbGwgY2F1c2UgdXMgdG8gcmUtZW50ZXIgdGhlIGRlc3RydWN0
b3Igd2hlbiBwcm90ZWN0b3IgZ29lcyBvdXQgb2Ygc2NvcGUuCiAgICAgLy8gTnVsbC1jaGVja2lu
ZyB0aGUgRnJhbWVWaWV3IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiB0aGUgZGVz
dHJ1Y3Rvci4KQEAgLTUwODMsNiArNTA4NSw3IEBAIFN0cmluZyBGcmFtZUxvYWRlcjo6cmVmZXJy
ZXIoKSBjb25zdAogCiB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2
YWlsYWJsZSgpCiB7CisgICAgbV9mcmFtZS0+aW5qZWN0UGFnZUdyb3VwVXNlckNvbnRlbnQoSW5q
ZWN0Q29udGVudEF0RG9jdW1lbnRTdGFydCk7CiAgICAgbV9jbGllbnQtPmRvY3VtZW50RWxlbWVu
dEF2YWlsYWJsZSgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1
ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpA
QCAtNjcsNiArNjgsOCBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKQEAgLTg0MSw2ICs4NDQsNDEgQEAgdm9pZCBGcmFtZTo6cmVhcHBseVN0eWxl
cygpCiAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKIH0KIAordm9pZCBGcmFtZTo6
aW5qZWN0UGFnZUdyb3VwVXNlckNvbnRlbnQoVXNlckNvbnRlbnRJbmplY3RUaW1lIGluamVjdFRp
bWUpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8VXNlckNvbnRlbnQ+JiB1c2VyQ29udGVudCA9
IG1fcGFnZS0+Z3JvdXAoKS51c2VyQ29udGVudCgpOworICAgIHVuc2lnbmVkIHNpemUgPSB1c2Vy
Q29udGVudC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
KyAgICAgICAgaW5qZWN0VXNlckNvbnRlbnQodXNlckNvbnRlbnRbaV0sIGluamVjdFRpbWUpOwor
fQorCit2b2lkIEZyYW1lOjppbmplY3RVc2VyQ29udGVudChjb25zdCBVc2VyQ29udGVudCYgdXNl
ckNvbnRlbnQsIFVzZXJDb250ZW50SW5qZWN0VGltZSBpbmplY3RUaW1lKQoreworICAgIGlmICgh
dXNlckNvbnRlbnQuc2hvdWxkSW5qZWN0KGluamVjdFRpbWUsIG1fZG9jLT51cmwoKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICh1c2VyQ29udGVudC5pc0NTU1N0eWxlc2hlZXQoKSkKKyAg
ICAgICAgaW5qZWN0VXNlclN0eWxlc2hlZXQodXNlckNvbnRlbnQpOworICAgIGVsc2UgaWYgKHVz
ZXJDb250ZW50LmlzSmF2YXNjcmlwdCgpKQorICAgICAgICBpbmplY3RVc2VyU2NyaXB0KHVzZXJD
b250ZW50KTsKK30KKwordm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdChjb25zdCBVc2VyQ29u
dGVudCYgdXNlckNvbnRlbnQpCit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gc3VwcG9ydCBp
c29sYXRlZCB3b3JsZHMuCisgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHVzZXJDb250
ZW50LnNvdXJjZSgpLCB1c2VyQ29udGVudC51cmwoKSk7CisgICAgc2NyaXB0KCktPmV2YWx1YXRl
KHNvdXJjZUNvZGUpOworfQorCit2b2lkIEZyYW1lOjppbmplY3RVc2VyU3R5bGVzaGVldChjb25z
dCBVc2VyQ29udGVudCYpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwogYm9vbCBG
cmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1Nl
bGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHko
KSwgZmFsc2UpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTY3JvbGxCZWhh
dmlvci5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0
R3JhbnVsYXJpdHkuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudC5oIgogCiAjaWYgUExBVEZPUk0o
V0lOKQogI2luY2x1ZGUgIkZyYW1lV2luLmgiCkBAIC0xMjgsNiArMTI5LDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjcmVhdGVWaWV3KGNvbnN0IEludFNpemUmLCBjb25z
dCBDb2xvciYsIGJvb2wsIGNvbnN0IEludFNpemUgJiwgYm9vbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJBdXRvLCBTY3JvbGxiYXJNb2RlID0gU2Ny
b2xsYmFyQXV0byk7CiAKKyAgICAgICAgdm9pZCBpbmplY3RQYWdlR3JvdXBVc2VyQ29udGVudChV
c2VyQ29udGVudEluamVjdFRpbWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBpbmpl
Y3RVc2VyQ29udGVudChjb25zdCBVc2VyQ29udGVudCYsIFVzZXJDb250ZW50SW5qZWN0VGltZSk7
CisgICAgICAgIHZvaWQgaW5qZWN0VXNlclN0eWxlc2hlZXQoY29uc3QgVXNlckNvbnRlbnQmKTsK
KyAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0KGNvbnN0IFVzZXJDb250ZW50Jik7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBGcmFtZShQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVtZW50Kiwg
RnJhbWVMb2FkZXJDbGllbnQqKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA0Nzc3OSkK
KysrIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNCAr
MTkzLDExIEBAIFN0b3JhZ2VOYW1lc3BhY2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9yYWcKIH0KICNl
bmRpZgogCit2b2lkIFBhZ2VHcm91cDo6YWRkVXNlckNvbnRlbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0dGVybnMsIGNvbnN0
IFN0cmluZyYgY29udGVudElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJD
b250ZW50SW5qZWN0VGltZSBpbmplY3RUaW1lKQoreworICAgIG1fdXNlckNvbnRlbnQuYXBwZW5k
KFVzZXJDb250ZW50KHNvdXJjZSwgdXJsLCBtaW1lVHlwZSwgcGF0dGVybnMsIGNvbnRlbnRJRCwg
aW5qZWN0VGltZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvUGFnZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5o
CShyZXZpc2lvbiA0Nzc3OSkKKysrIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlVz
ZXJDb250ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjYsNiArNjcsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3Jh
Z2UoKTsKICNlbmRpZgogCisgICAgICAgIHZvaWQgYWRkVXNlckNvbnRlbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0dGVybnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBjb250ZW50SUQsIFVzZXJDb250ZW50SW5qZWN0VGltZSk7CisgICAgICAgIHZvaWQg
cmVtb3ZlVXNlckNvbnRlbnQoKSB7IG1fdXNlckNvbnRlbnQuY2xlYXIoKTsgfQorICAgICAgICBj
b25zdCBWZWN0b3I8VXNlckNvbnRlbnQ+JiB1c2VyQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlckNvbnRlbnQ7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgYWRkVmlzaXRlZExp
bmsoTGlua0hhc2ggc3RyaW5nSGFzaCk7CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQpAQCAtODIs
NiArODgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQog
ICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3JhZ2U7CiAjZW5kaWYK
KworICAgICAgICBWZWN0b3I8VXNlckNvbnRlbnQ+IG1fdXNlckNvbnRlbnQ7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50LmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisgCisjaWZuZGVmIFVzZXJDb250ZW50X2gKKyNkZWZpbmUgVXNlckNvbnRlbnRf
aAorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBVc2VyQ29udGVu
dEluamVjdFRpbWUgeyBJbmplY3RDb250ZW50QXREb2N1bWVudFN0YXJ0LCBJbmplY3RDb250ZW50
QXREb2N1bWVudEVuZCB9OworCitjbGFzcyBVc2VyQ29udGVudCB7CitwdWJsaWM6CisgICAgVXNl
ckNvbnRlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwKKyAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0
dGVybnMsIGNvbnN0IFN0cmluZyYgY29udGVudElELAorICAgICAgICAgICAgICAgIFVzZXJDb250
ZW50SW5qZWN0VGltZSBpbmplY3RUaW1lKQorICAgIDogbV9zb3VyY2Uoc291cmNlKQorICAgICwg
bV91cmwodXJsKQorICAgICwgbV9taW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1fcGF0dGVybnMo
cGF0dGVybnMpCisgICAgLCBtX2NvbnRlbnRJRChjb250ZW50SUQpCisgICAgLCBtX2luamVjdFRp
bWUoaW5qZWN0VGltZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWltZVR5cGU7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0dGVybnMo
KSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5zOyB9CisgICAgY29uc3QgU3RyaW5nJiBjb250ZW50
SUQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRJRDsgfQorICAgIFVzZXJDb250ZW50SW5qZWN0
VGltZSBpbmplY3RUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3RUaW1lOyB9CisgICAgCisg
ICAgYm9vbCBpc0NTU1N0eWxlc2hlZXQoKSBjb25zdCB7IHJldHVybiBtaW1lVHlwZSgpID09ICJ0
ZXh0L2NzcyI7IH0KKyAgICBib29sIGlzSmF2YXNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1pbWVU
eXBlKCkgPT0gInRleHQvamF2YXNjcmlwdCI7IH0KKyAgICAKKyAgICAvLyBGSVhNRTogU3VwcG9y
dCBwYXR0ZXJucy4KKyAgICBib29sIHNob3VsZEluamVjdChVc2VyQ29udGVudEluamVjdFRpbWUg
dGltZSwgY29uc3QgS1VSTCYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNDU1NTdHlsZXNo
ZWV0KCkpCisgICAgICAgICAgICByZXR1cm4gdGltZSA9PSBJbmplY3RDb250ZW50QXREb2N1bWVu
dFN0YXJ0OworICAgICAgICByZXR1cm4gbV9pbmplY3RUaW1lID09IHRpbWU7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgS1VSTCBtX3VybDsKKyAgICBT
dHJpbmcgbV9taW1lVHlwZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3BhdHRlcm5zOworICAgIFN0
cmluZyBtX2NvbnRlbnRJRDsKKyAgICBVc2VyQ29udGVudEluamVjdFRpbWUgbV9pbmplY3RUaW1l
OworfTsKKworfSAvLyBuYW1zZXBhY2UgV2ViQ29yZQorIAorI2VuZGlmIC8vIFVzZXJDb250ZW50
X2gKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA0Nzc3OSkKKysrIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA4LDYgKzIxMDgsNDIg
QEAgc3RhdGljIGlubGluZSBJTVAgZ2V0TWV0aG9kKGlkIG8sIFNFTCBzKQogICAgICAgICBfcHJp
dmF0ZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShbW3NlbGYgd2luZG93XSBp
c0tleVdpbmRvd10pOwogfQogCisrICh2b2lkKV9hZGRVc2VyQ29udGVudFRvR3JvdXA6KE5TU3Ry
aW5nICopZ3JvdXBOYW1lIHNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgdXJsOihOU1VSTCAqKXVy
bCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZSBj
b250ZW50SUQ6KE5TU3RyaW5nICopY29udGVudElEIAorICAgICAgICAgICAgICAgICAgICAgIHBh
dHRlcm5zOihOU0FycmF5ICopcGF0dGVybnMgaW5qZWN0VGltZTooV2ViVXNlckNvbnRlbnRJbmpl
Y3RUaW1lKWluamVjdFRpbWUKK3sKKyAgICBTdHJpbmcgZ3JvdXAoZ3JvdXBOYW1lKTsKKyAgICBp
ZiAoZ3JvdXAuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGFnZUdyb3Vw
KiBwYWdlR3JvdXAgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChncm91cCk7CisgICAgQVNTRVJUKHBh
Z2VHcm91cCk7CisgICAgaWYgKCFwYWdlR3JvdXApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICAvLyBDb252ZXJ0IHRoZSBwYXR0ZXJucyBpbnRvIGEgVmVjdG9yLgorICAgIFZlY3RvcjxTdHJp
bmc+IHBhdHRlcm5zVmVjdG9yOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBbcGF0dGVy
bnMgY291bnRdOyArK2kpIHsKKyAgICAgICAgaWYgKFtbcGF0dGVybnMgb2JqZWN0QXRJbmRleDpp
XSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgcGF0dGVybnNW
ZWN0b3IuYXBwZW5kKFN0cmluZygoTlNTdHJpbmcqKVtwYXR0ZXJucyBvYmplY3RBdEluZGV4Omld
KSk7CisgICAgfQorICAgIAorICAgIHBhZ2VHcm91cC0+YWRkVXNlckNvbnRlbnQoc291cmNlLCB1
cmwsIG1pbWVUeXBlLCBwYXR0ZXJuc1ZlY3RvciwgY29udGVudElELCAoVXNlckNvbnRlbnRJbmpl
Y3RUaW1lKWluamVjdFRpbWUpOworfQorCisrICh2b2lkKV9yZW1vdmVVc2VyQ29udGVudEZyb21H
cm91cDooTlNTdHJpbmcgKilncm91cE5hbWUKK3sKKyAgICBTdHJpbmcgZ3JvdXAoZ3JvdXBOYW1l
KTsKKyAgICBpZiAoZ3JvdXAuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
UGFnZUdyb3VwKiBwYWdlR3JvdXAgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChncm91cCk7CisgICAg
QVNTRVJUKHBhZ2VHcm91cCk7CisgICAgaWYgKCFwYWdlR3JvdXApCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBwYWdlR3JvdXAtPnJlbW92ZVVzZXJDb250ZW50KCk7Cit9CiBAZW5kCiAKIEBp
bXBsZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDExIEBAIHR5cGVkZWYgZW51
bSB7CiB9IFdlYkRhc2hib2FyZEJlaGF2aW9yOwogI2VuZGlmCiAKK3R5cGVkZWYgZW51bSB7Cisg
ICAgV2ViSW5qZWN0QXREb2N1bWVudFN0YXJ0LAorICAgIFdlYkluamVjdEF0RG9jdW1lbnRFbmQs
Cit9IFdlYlVzZXJDb250ZW50SW5qZWN0VGltZTsKKwogQGludGVyZmFjZSBXZWJDb250cm9sbGVy
IDogTlNUcmVlQ29udHJvbGxlciB7CiAgICAgSUJPdXRsZXQgV2ViVmlldyAqd2ViVmlldzsKIH0K
QEAgLTQ1Miw2ICs0NTcsOSBAQCBDb3VsZCBiZSB3b3J0aCBhZGRpbmcgdG8gdGhlIEFQSS4KIC8v
IFJlbW92ZXMgYWxsIHdoaXRlIGxpc3QgZW50cmllcyBjcmVhdGVkIHdpdGggX3doaXRlTGlzdEFj
Y2Vzc0Zyb21PcmlnaW4uCiArICh2b2lkKV9yZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHM7CiAK
KysgKHZvaWQpX2FkZFVzZXJDb250ZW50VG9Hcm91cDooTlNTdHJpbmcgKilncm91cE5hbWUgc291
cmNlOihOU1N0cmluZyAqKXNvdXJjZSB1cmw6KE5TVVJMICopdXJsIHR5cGU6KE5TU3RyaW5nICop
bWltZVR5cGUgY29udGVudElEOihOU1N0cmluZyAqKWNvbnRlbnRJRCBwYXR0ZXJuczooTlNBcnJh
eSAqKXBhdHRlcm5zIGluamVjdFRpbWU6KFdlYlVzZXJDb250ZW50SW5qZWN0VGltZSlpbmplY3RU
aW1lOworKyAodm9pZClfcmVtb3ZlVXNlckNvbnRlbnRGcm9tR3JvdXA6KE5TU3RyaW5nICopZ3Jv
dXBOYW1lOworCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld1ByaW50aW5nUHJp
dmF0ZSkKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy91c2Vyc2NyaXB0cy9zY3JpcHQt
cnVuLWF0LWVuZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL3VzZXJzY3JpcHRzL3NjcmlwdC1ydW4tYXQtZW5kLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy91c2Vyc2NyaXB0cy9zY3JpcHQtcnVu
LWF0LWVuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1BBU1MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38889</attachid>
            <date>2009-09-01 15:08:08 -0700</date>
            <delta_ts>2009-09-03 15:16:41 -0700</delta_ts>
            <desc>Include test and DRT changes</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22179</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03NDYsNiArNzQ2LDggQEAgX19aTjdXZWJDb3JlOVBhZ2VH
cm91cDE0YWRkVmlzaXRlZExpbmtFUAogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDE3Y2xvc2VMb2Nh
bFN0b3JhZ2VFdgogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDIxcmVtb3ZlQWxsVmlzaXRlZExpbmtz
RXYKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXAyNnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzRWIK
K19fWk43V2ViQ29yZTlQYWdlR3JvdXA5cGFnZUdyb3VwRVJLTlNfNlN0cmluZ0UKK19fWk43V2Vi
Q29yZTlQYWdlR3JvdXAxNGFkZFVzZXJDb250ZW50RVJLTlNfNlN0cmluZ0VSS05TXzRLVVJMRVMz
X1JLTjNXVEY2VmVjdG9ySVMxX0xtMEVFRVMzX05TXzIxVXNlckNvbnRlbnRJbmplY3RUaW1lRQog
X19aTjdXZWJDb3JlOVRpbWVyQmFzZTRzdG9wRXYKIF9fWk43V2ViQ29yZTlUaW1lckJhc2U1c3Rh
cnRFZGQKIF9fWk43V2ViQ29yZTlUaW1lckJhc2VDMkV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDc3NzkpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzk1Myw2
ICszOTUzLDcgQEAKIAkJQkMxNDAyOEEwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMTQwMjg4MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5j
cHAgKi87IH07CiAJCUJDMTQwMjhCMEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMxNDAyODkwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggKi87
IH07CiAJCUJDMTdGOTY2MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MTdGOTY1MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCAq
LzsgfTsKKwkJQkMxOTVCNTkxMDQ3NEE3QjAwREI3QzdDIC8qIFVzZXJDb250ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE5NUI1ODEwNDc0QTdB
MDBEQjdDN0MgLyogVXNlckNvbnRlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQzFBMzdBRDA5N0M3MTVGMDAxOUYzRDggLyogRE9NLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzFBMzc5NzA5N0M3
MTVGMDAxOUYzRDggLyogRE9NLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkMxQTM3QUUwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMUEzNzk4MDk3QzcxNUYw
MDE5RjNEOCAvKiBET00ubW0gKi87IH07CiAJCUJDMUEzN0FGMDk3QzcxNUYwMDE5RjNEOCAvKiBE
T01Db3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzFBMzc5OTA5N0M3MTVGMDAxOUYzRDggLyogRE9NQ29yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04OTMyLDYgKzg5MzMsNyBAQAogCQlCQzE3
Rjk2NTBCNjRFQkI4MDA0QTY1Q0IgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTg4MUQ5MEUwOEM0RUQw
MDA0OEMxMyAvKiBGaWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGaWxlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxODgxREMwRTA4QzU0MzAwMDQ4QzEzIC8qIEZp
bGVMaXN0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGaWxlTGlzdC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMTk1QjU4MTA0NzRBN0EwMERCN0M3QyAvKiBVc2VyQ29u
dGVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzFBMzc5NzA5N0M3MTVGMDAxOUYzRDggLyog
RE9NLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET00uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxQTM3OTgwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET00ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMUEzNzk5MDk3QzcxNUYwMDE5RjNEOCAvKiBET01Db3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Db3JlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDg1OCw2ICsxMDg2MCw3IEBACiAJCQkJQkNEMEUwRjkw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oICovLAogCQkJCTE0QzlBNUU5
MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi8sCiAJCQkJRjU4Nzg2M0EwMkRFM0Ex
NDAxRUE0MTIyIC8qIFNldHRpbmdzLmggKi8sCisJCQkJQkMxOTVCNTgxMDQ3NEE3QTAwREI3QzdD
IC8qIFVzZXJDb250ZW50LmggKi8sCiAJCQkJNDk0QkQ3OTMwRjU1QzhFRTAwNzQ3ODI4IC8qIFdl
YktpdFBvaW50LmggKi8sCiAJCQkJNDk0QkQ3OTQwRjU1QzhFRTAwNzQ3ODI4IC8qIFdlYktpdFBv
aW50LmlkbCAqLywKIAkJCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVy
ZXMuY3BwICovLApAQCAtMTc1MjYsNiArMTc1MjksNyBAQAogCQkJCTQ5QzdCOUU2MTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEw
NDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QzdCQTAwMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQzE5NUI1OTEwNDc0QTdCMDBEQjdDN0MgLyogVXNlckNvbnRlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDc3NzkpCisrKyBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDYsNiAr
MTIwNiw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmZpbmlzaGVkUGFyc2luZygpCiAgICAgaWYgKG1f
Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9m
cmFtZS0+aW5qZWN0UGFnZUdyb3VwVXNlckNvbnRlbnQoSW5qZWN0Q29udGVudEF0RG9jdW1lbnRF
bmQpOworCiAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIEZyYW1lJ3MgZGVzdHJ1
Y3RvciwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJ3QgcHJvdGVjdCBvdXJzZWx2ZXMKICAgICAv
LyBiZWNhdXNlIGRvaW5nIHNvIHdpbGwgY2F1c2UgdXMgdG8gcmUtZW50ZXIgdGhlIGRlc3RydWN0
b3Igd2hlbiBwcm90ZWN0b3IgZ29lcyBvdXQgb2Ygc2NvcGUuCiAgICAgLy8gTnVsbC1jaGVja2lu
ZyB0aGUgRnJhbWVWaWV3IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiB0aGUgZGVz
dHJ1Y3Rvci4KQEAgLTUwODMsNiArNTA4NSw3IEBAIFN0cmluZyBGcmFtZUxvYWRlcjo6cmVmZXJy
ZXIoKSBjb25zdAogCiB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2
YWlsYWJsZSgpCiB7CisgICAgbV9mcmFtZS0+aW5qZWN0UGFnZUdyb3VwVXNlckNvbnRlbnQoSW5q
ZWN0Q29udGVudEF0RG9jdW1lbnRTdGFydCk7CiAgICAgbV9jbGllbnQtPmRvY3VtZW50RWxlbWVu
dEF2YWlsYWJsZSgpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1
ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpA
QCAtNjcsNiArNjgsOCBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKQEAgLTg0MSw2ICs4NDQsNDEgQEAgdm9pZCBGcmFtZTo6cmVhcHBseVN0eWxl
cygpCiAgICAgbV9kb2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKIH0KIAordm9pZCBGcmFtZTo6
aW5qZWN0UGFnZUdyb3VwVXNlckNvbnRlbnQoVXNlckNvbnRlbnRJbmplY3RUaW1lIGluamVjdFRp
bWUpCit7CisgICAgQVNTRVJUKG1fcGFnZSk7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8VXNlckNvbnRlbnQ+JiB1c2VyQ29udGVudCA9
IG1fcGFnZS0+Z3JvdXAoKS51c2VyQ29udGVudCgpOworICAgIHVuc2lnbmVkIHNpemUgPSB1c2Vy
Q29udGVudC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
KyAgICAgICAgaW5qZWN0VXNlckNvbnRlbnQodXNlckNvbnRlbnRbaV0sIGluamVjdFRpbWUpOwor
fQorCit2b2lkIEZyYW1lOjppbmplY3RVc2VyQ29udGVudChjb25zdCBVc2VyQ29udGVudCYgdXNl
ckNvbnRlbnQsIFVzZXJDb250ZW50SW5qZWN0VGltZSBpbmplY3RUaW1lKQoreworICAgIGlmICgh
dXNlckNvbnRlbnQuc2hvdWxkSW5qZWN0KGluamVjdFRpbWUsIG1fZG9jLT51cmwoKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICh1c2VyQ29udGVudC5pc0NTU1N0eWxlc2hlZXQoKSkKKyAg
ICAgICAgaW5qZWN0VXNlclN0eWxlc2hlZXQodXNlckNvbnRlbnQpOworICAgIGVsc2UgaWYgKHVz
ZXJDb250ZW50LmlzSmF2YXNjcmlwdCgpKQorICAgICAgICBpbmplY3RVc2VyU2NyaXB0KHVzZXJD
b250ZW50KTsKK30KKwordm9pZCBGcmFtZTo6aW5qZWN0VXNlclNjcmlwdChjb25zdCBVc2VyQ29u
dGVudCYgdXNlckNvbnRlbnQpCit7CisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gc3VwcG9ydCBp
c29sYXRlZCB3b3JsZHMuCisgICAgU2NyaXB0U291cmNlQ29kZSBzb3VyY2VDb2RlKHVzZXJDb250
ZW50LnNvdXJjZSgpLCB1c2VyQ29udGVudC51cmwoKSk7CisgICAgc2NyaXB0KCktPmV2YWx1YXRl
KHNvdXJjZUNvZGUpOworfQorCit2b2lkIEZyYW1lOjppbmplY3RVc2VyU3R5bGVzaGVldChjb25z
dCBVc2VyQ29udGVudCYpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwogYm9vbCBG
cmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1Nl
bGVjdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHko
KSwgZmFsc2UpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJTY3JvbGxCZWhh
dmlvci5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0
R3JhbnVsYXJpdHkuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudC5oIgogCiAjaWYgUExBVEZPUk0o
V0lOKQogI2luY2x1ZGUgIkZyYW1lV2luLmgiCkBAIC0xMjgsNiArMTI5LDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjcmVhdGVWaWV3KGNvbnN0IEludFNpemUmLCBjb25z
dCBDb2xvciYsIGJvb2wsIGNvbnN0IEludFNpemUgJiwgYm9vbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJBdXRvLCBTY3JvbGxiYXJNb2RlID0gU2Ny
b2xsYmFyQXV0byk7CiAKKyAgICAgICAgdm9pZCBpbmplY3RQYWdlR3JvdXBVc2VyQ29udGVudChV
c2VyQ29udGVudEluamVjdFRpbWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBpbmpl
Y3RVc2VyQ29udGVudChjb25zdCBVc2VyQ29udGVudCYsIFVzZXJDb250ZW50SW5qZWN0VGltZSk7
CisgICAgICAgIHZvaWQgaW5qZWN0VXNlclN0eWxlc2hlZXQoY29uc3QgVXNlckNvbnRlbnQmKTsK
KyAgICAgICAgdm9pZCBpbmplY3RVc2VyU2NyaXB0KGNvbnN0IFVzZXJDb250ZW50Jik7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBGcmFtZShQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVtZW50Kiwg
RnJhbWVMb2FkZXJDbGllbnQqKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA0Nzc3OSkK
KysrIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNCAr
MTkzLDExIEBAIFN0b3JhZ2VOYW1lc3BhY2UqIFBhZ2VHcm91cDo6bG9jYWxTdG9yYWcKIH0KICNl
bmRpZgogCit2b2lkIFBhZ2VHcm91cDo6YWRkVXNlckNvbnRlbnQoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0dGVybnMsIGNvbnN0
IFN0cmluZyYgY29udGVudElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJD
b250ZW50SW5qZWN0VGltZSBpbmplY3RUaW1lKQoreworICAgIG1fdXNlckNvbnRlbnQuYXBwZW5k
KFVzZXJDb250ZW50KHNvdXJjZSwgdXJsLCBtaW1lVHlwZSwgcGF0dGVybnMsIGNvbnRlbnRJRCwg
aW5qZWN0VGltZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvUGFnZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5o
CShyZXZpc2lvbiA0Nzc3OSkKKysrIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2lu
Y2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlVz
ZXJDb250ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjYsNiArNjcsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKiBsb2NhbFN0b3Jh
Z2UoKTsKICNlbmRpZgogCisgICAgICAgIHZvaWQgYWRkVXNlckNvbnRlbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0dGVybnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBjb250ZW50SUQsIFVzZXJDb250ZW50SW5qZWN0VGltZSk7CisgICAgICAgIHZvaWQg
cmVtb3ZlVXNlckNvbnRlbnQoKSB7IG1fdXNlckNvbnRlbnQuY2xlYXIoKTsgfQorICAgICAgICBj
b25zdCBWZWN0b3I8VXNlckNvbnRlbnQ+JiB1c2VyQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlckNvbnRlbnQ7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgYWRkVmlzaXRlZExp
bmsoTGlua0hhc2ggc3RyaW5nSGFzaCk7CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQpAQCAtODIs
NiArODgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQog
ICAgICAgICBSZWZQdHI8U3RvcmFnZU5hbWVzcGFjZT4gbV9sb2NhbFN0b3JhZ2U7CiAjZW5kaWYK
KworICAgICAgICBWZWN0b3I8VXNlckNvbnRlbnQ+IG1fdXNlckNvbnRlbnQ7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50LmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisgCisjaWZuZGVmIFVzZXJDb250ZW50X2gKKyNkZWZpbmUgVXNlckNvbnRlbnRf
aAorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBVc2VyQ29udGVu
dEluamVjdFRpbWUgeyBJbmplY3RDb250ZW50QXREb2N1bWVudFN0YXJ0LCBJbmplY3RDb250ZW50
QXREb2N1bWVudEVuZCB9OworCitjbGFzcyBVc2VyQ29udGVudCB7CitwdWJsaWM6CisgICAgVXNl
ckNvbnRlbnQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwKKyAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0
dGVybnMsIGNvbnN0IFN0cmluZyYgY29udGVudElELAorICAgICAgICAgICAgICAgIFVzZXJDb250
ZW50SW5qZWN0VGltZSBpbmplY3RUaW1lKQorICAgIDogbV9zb3VyY2Uoc291cmNlKQorICAgICwg
bV91cmwodXJsKQorICAgICwgbV9taW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIG1fcGF0dGVybnMo
cGF0dGVybnMpCisgICAgLCBtX2NvbnRlbnRJRChjb250ZW50SUQpCisgICAgLCBtX2luamVjdFRp
bWUoaW5qZWN0VGltZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWltZVR5cGU7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0dGVybnMo
KSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5zOyB9CisgICAgY29uc3QgU3RyaW5nJiBjb250ZW50
SUQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRJRDsgfQorICAgIFVzZXJDb250ZW50SW5qZWN0
VGltZSBpbmplY3RUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3RUaW1lOyB9CisgICAgCisg
ICAgYm9vbCBpc0NTU1N0eWxlc2hlZXQoKSBjb25zdCB7IHJldHVybiBtaW1lVHlwZSgpID09ICJ0
ZXh0L2NzcyI7IH0KKyAgICBib29sIGlzSmF2YXNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1pbWVU
eXBlKCkgPT0gInRleHQvamF2YXNjcmlwdCI7IH0KKyAgICAKKyAgICAvLyBGSVhNRTogU3VwcG9y
dCBwYXR0ZXJucy4KKyAgICBib29sIHNob3VsZEluamVjdChVc2VyQ29udGVudEluamVjdFRpbWUg
dGltZSwgY29uc3QgS1VSTCYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNDU1NTdHlsZXNo
ZWV0KCkpCisgICAgICAgICAgICByZXR1cm4gdGltZSA9PSBJbmplY3RDb250ZW50QXREb2N1bWVu
dFN0YXJ0OworICAgICAgICByZXR1cm4gbV9pbmplY3RUaW1lID09IHRpbWU7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgS1VSTCBtX3VybDsKKyAgICBT
dHJpbmcgbV9taW1lVHlwZTsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3BhdHRlcm5zOworICAgIFN0
cmluZyBtX2NvbnRlbnRJRDsKKyAgICBVc2VyQ29udGVudEluamVjdFRpbWUgbV9pbmplY3RUaW1l
OworfTsKKworfSAvLyBuYW1zZXBhY2UgV2ViQ29yZQorIAorI2VuZGlmIC8vIFVzZXJDb250ZW50
X2gKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA0Nzc3OSkKKysrIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA4LDYgKzIxMDgsNDIg
QEAgc3RhdGljIGlubGluZSBJTVAgZ2V0TWV0aG9kKGlkIG8sIFNFTCBzKQogICAgICAgICBfcHJp
dmF0ZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShbW3NlbGYgd2luZG93XSBp
c0tleVdpbmRvd10pOwogfQogCisrICh2b2lkKV9hZGRVc2VyQ29udGVudFRvR3JvdXA6KE5TU3Ry
aW5nICopZ3JvdXBOYW1lIHNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgdXJsOihOU1VSTCAqKXVy
bCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTooTlNTdHJpbmcgKiltaW1lVHlwZSBj
b250ZW50SUQ6KE5TU3RyaW5nICopY29udGVudElEIAorICAgICAgICAgICAgICAgICAgICAgIHBh
dHRlcm5zOihOU0FycmF5ICopcGF0dGVybnMgaW5qZWN0VGltZTooV2ViVXNlckNvbnRlbnRJbmpl
Y3RUaW1lKWluamVjdFRpbWUKK3sKKyAgICBTdHJpbmcgZ3JvdXAoZ3JvdXBOYW1lKTsKKyAgICBp
ZiAoZ3JvdXAuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGFnZUdyb3Vw
KiBwYWdlR3JvdXAgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChncm91cCk7CisgICAgQVNTRVJUKHBh
Z2VHcm91cCk7CisgICAgaWYgKCFwYWdlR3JvdXApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICAvLyBDb252ZXJ0IHRoZSBwYXR0ZXJucyBpbnRvIGEgVmVjdG9yLgorICAgIFZlY3RvcjxTdHJp
bmc+IHBhdHRlcm5zVmVjdG9yOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBbcGF0dGVy
bnMgY291bnRdOyArK2kpIHsKKyAgICAgICAgaWYgKFtbcGF0dGVybnMgb2JqZWN0QXRJbmRleDpp
XSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICAgICAgcGF0dGVybnNW
ZWN0b3IuYXBwZW5kKFN0cmluZygoTlNTdHJpbmcqKVtwYXR0ZXJucyBvYmplY3RBdEluZGV4Omld
KSk7CisgICAgfQorICAgIAorICAgIHBhZ2VHcm91cC0+YWRkVXNlckNvbnRlbnQoc291cmNlLCB1
cmwsIG1pbWVUeXBlLCBwYXR0ZXJuc1ZlY3RvciwgY29udGVudElELCAoVXNlckNvbnRlbnRJbmpl
Y3RUaW1lKWluamVjdFRpbWUpOworfQorCisrICh2b2lkKV9yZW1vdmVVc2VyQ29udGVudEZyb21H
cm91cDooTlNTdHJpbmcgKilncm91cE5hbWUKK3sKKyAgICBTdHJpbmcgZ3JvdXAoZ3JvdXBOYW1l
KTsKKyAgICBpZiAoZ3JvdXAuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
UGFnZUdyb3VwKiBwYWdlR3JvdXAgPSBQYWdlR3JvdXA6OnBhZ2VHcm91cChncm91cCk7CisgICAg
QVNTRVJUKHBhZ2VHcm91cCk7CisgICAgaWYgKCFwYWdlR3JvdXApCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBwYWdlR3JvdXAtPnJlbW92ZVVzZXJDb250ZW50KCk7Cit9CiBAZW5kCiAKIEBp
bXBsZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDExIEBAIHR5cGVkZWYgZW51
bSB7CiB9IFdlYkRhc2hib2FyZEJlaGF2aW9yOwogI2VuZGlmCiAKK3R5cGVkZWYgZW51bSB7Cisg
ICAgV2ViSW5qZWN0QXREb2N1bWVudFN0YXJ0LAorICAgIFdlYkluamVjdEF0RG9jdW1lbnRFbmQs
Cit9IFdlYlVzZXJDb250ZW50SW5qZWN0VGltZTsKKwogQGludGVyZmFjZSBXZWJDb250cm9sbGVy
IDogTlNUcmVlQ29udHJvbGxlciB7CiAgICAgSUJPdXRsZXQgV2ViVmlldyAqd2ViVmlldzsKIH0K
QEAgLTQ1Miw2ICs0NTcsOSBAQCBDb3VsZCBiZSB3b3J0aCBhZGRpbmcgdG8gdGhlIEFQSS4KIC8v
IFJlbW92ZXMgYWxsIHdoaXRlIGxpc3QgZW50cmllcyBjcmVhdGVkIHdpdGggX3doaXRlTGlzdEFj
Y2Vzc0Zyb21PcmlnaW4uCiArICh2b2lkKV9yZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHM7CiAK
KysgKHZvaWQpX2FkZFVzZXJDb250ZW50VG9Hcm91cDooTlNTdHJpbmcgKilncm91cE5hbWUgc291
cmNlOihOU1N0cmluZyAqKXNvdXJjZSB1cmw6KE5TVVJMICopdXJsIHR5cGU6KE5TU3RyaW5nICop
bWltZVR5cGUgY29udGVudElEOihOU1N0cmluZyAqKWNvbnRlbnRJRCBwYXR0ZXJuczooTlNBcnJh
eSAqKXBhdHRlcm5zIGluamVjdFRpbWU6KFdlYlVzZXJDb250ZW50SW5qZWN0VGltZSlpbmplY3RU
aW1lOworKyAodm9pZClfcmVtb3ZlVXNlckNvbnRlbnRGcm9tR3JvdXA6KE5TU3RyaW5nICopZ3Jv
dXBOYW1lOworCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld1ByaW50aW5nUHJp
dmF0ZSkKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTIs
NiArODkyLDIwIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHdoaXRlTGlzdEFjY2Vzc0Zyb21PcmkKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1Zh
bHVlUmVmIGFkZFVzZXJTY3JpcHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
aWYgKGFyZ3VtZW50Q291bnQgIT0gMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworICAgIAorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3VyY2Uo
QWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGJvb2wgcnVuQXRTdGFydCA9IEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKKyAgICAKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGRVc2VyU2NyaXB0KHNvdXJjZS5nZXQoKSwgcnVuQXRTdGFydCk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorIAogLy8gU3RhdGljIFZhbHVlcwogCiBzdGF0
aWMgSlNWYWx1ZVJlZiBnZXRHbG9iYWxGbGFnQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQpAQCAtOTY4LDYgKzk4Miw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExh
eW91dFRlc3RDb250cm9sbGVyOjoKIHsKICAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0
aWNGdW5jdGlvbnNbXSA9IHsKICAgICAgICAgeyAiYWRkRGlzYWxsb3dlZFVSTCIsIGFkZERpc2Fs
bG93ZWRVUkxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhZGRVc2VyU2NyaXB0IiwgYWRk
VXNlclNjcmlwdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImNsZWFyQWxsRGF0YWJhc2Vz
IiwgY2xlYXJBbGxEYXRhYmFzZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjbGVhckJh
Y2tGb3J3YXJkTGlzdCIsIGNsZWFyQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiY2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQiLCBjbGVhclBlcnNpc3RlbnRV
c2VyU3R5bGVTaGVldENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ3Nzc5KQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgyLDYgKzE4Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2hpdGVM
aXN0QWNjZXNzRnJvbU9yaWdpbihKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVm
IGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiAKKyAgICB2b2lkIGFkZFVzZXJTY3JpcHQoSlNT
dHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQpOworCiBwcml2YXRlOgogICAgIGJvb2wg
bV9kdW1wQXNUZXh0OwogICAgIGJvb2wgbV9kdW1wQXNQREY7CkluZGV4OiBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0
ay5jcHAJKHJldmlzaW9uIDQ3Nzc5KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDMgKzM4
OSw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICAvLyBG
SVhNRTogaW1wbGVtZW50CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJT
Y3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQpCit7CisgICAgcHJpbnRm
KCJMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdCBub3QgaW1wbGVtZW50ZWQuXG4i
KTsKK30KKwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJU
cmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbQkocmV2aXNpb24gNDc3NzkpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNzUsNiArMTA3
NSw3IEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXQKICAgICBbd2Vi
VmlldyBfc2V0RGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JVc2VCYWNrd2Fy
ZENvbXBhdGliaWxpdHlNb2RlIHRvOk5PXTsKICAgICBbd2ViVmlldyBfY2xlYXJNYWluRnJhbWVO
YW1lXTsKICAgICBbW3dlYlZpZXcgdW5kb01hbmFnZXJdIHJlbW92ZUFsbEFjdGlvbnNdOworICAg
IFtXZWJWaWV3IF9yZW1vdmVVc2VyQ29udGVudEZyb21Hcm91cDpbd2ViVmlldyBncm91cE5hbWVd
XTsKIAogICAgIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKIApJbmRleDogV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29u
dHJvbGxlck1hYy5tbQkocmV2aXNpb24gNDc3NzkpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1
NCwzICs0NTQsMTAgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2hpdGVMaXN0QWNjZQog
ICAgIE5TU3RyaW5nICpkZXN0aW5hdGlvbkhvc3ROUyA9IChOU1N0cmluZyAqKWhvc3RDRi5nZXQo
KTsKICAgICBbV2ViVmlldyBfd2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbjpzb3VyY2VPcmlnaW5O
UyBkZXN0aW5hdGlvblByb3RvY29sOmRlc3RpbmF0aW9uUHJvdG9jb2xOUyBkZXN0aW5hdGlvbkhv
c3Q6ZGVzdGluYXRpb25Ib3N0TlMgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnM6YWxsb3dEZXN0
aW5hdGlvblN1YmRvbWFpbnNdOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRV
c2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0KQoreworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gc291cmNlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc291cmNlKSk7CisgICAgTlNTdHJpbmcgKnNvdXJjZU5T
ID0gKE5TU3RyaW5nICopc291cmNlQ0YuZ2V0KCk7CisgICAgW1dlYlZpZXcgX2FkZFVzZXJDb250
ZW50VG9Hcm91cDpAIm9yZy53ZWJraXQuRHVtcFJlbmRlclRyZWUiIHNvdXJjZTpzb3VyY2VOUyB1
cmw6bmlsIHR5cGU6QCJ0ZXh0L2phdmFzY3JpcHQiIGNvbnRlbnRJRDpuaWwgcGF0dGVybnM6bmls
IGluamVjdFRpbWU6KHJ1bkF0U3RhcnQgPyBXZWJJbmplY3RBdERvY3VtZW50U3RhcnQgOiBXZWJJ
bmplY3RBdERvY3VtZW50RW5kKV07Cit9CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlz
aW9uIDQ3Nzc5KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RD
b250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIxLDMgKzgyMSw4IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OndoaXRlTGlzdEFjY2UKIHsKICAgICBwcmludGYoIkxheW91
dFRlc3RDb250cm9sbGVyOjp3aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luIG5vdCBpbXBsZW1lbnRl
ZFxuIik7CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNT
dHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQpCit7CisgICAgcHJpbnRmKCJMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdCBub3QgaW1wbGVtZW50ZWQuXG4iKTsKK30KSW5k
ZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRl
c3RDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA0Nzc3OSkKKysrIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzIsMyArMjcyLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVm
ZQogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCkKK3sK
KyAgICBwcmludGYoIkxheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBs
ZW1lbnRlZC5cbiIpOworfQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3VzZXJzY3Jp
cHRzL3NjcmlwdC1ydW4tYXQtZW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvdXNlcnNjcmlwdHMvc2NyaXB0LXJ1bi1hdC1lbmQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3VzZXJzY3JpcHRz
L3NjcmlwdC1ydW4tYXQtZW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBA
QAorUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvdXNlcnNjcmlwdHMvc2NyaXB0LXJ1bi1hdC1lbmQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy91c2Vyc2NyaXB0cy9zY3JpcHQtcnVuLWF0
LWVuZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvdXNlcnNjcmlwdHMvc2NyaXB0
LXJ1bi1hdC1lbmQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuYWRkVXNlclNjcmlwdCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3RhcmdldCcpLmlubmVySFRNTCA9ICdQQVNTJyIsIGZhbHNlKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0YXJnZXQiPkZBSUw8L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39013</attachid>
            <date>2009-09-03 15:16:41 -0700</date>
            <delta_ts>2009-09-03 16:09:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26815</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC03NDIsMTAgKzc0MiwxNCBAQCBfX1pON1dlYkNvcmU5SFRN
TE5hbWVzOWlmcmFtZVRhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXM5c2NyaXB0VGFnRQogX19a
TjdXZWJDb3JlOVBhZ2VDYWNoZTExc2V0Q2FwYWNpdHlFaQogX19aTjdXZWJDb3JlOVBhZ2VDYWNo
ZTI3cmVsZWFzZUF1dG9yZWxlYXNlZFBhZ2VzTm93RXYKK19fWk43V2ViQ29yZTlQYWdlR3JvdXAx
M2FkZFVzZXJTY3JpcHRFUktOU182U3RyaW5nRVJLTlNfNEtVUkxFUktOM1dURjZWZWN0b3JJUzFf
TG0wRUVFaU5TXzIzVXNlclNjcmlwdEluamVjdGlvblRpbWVFCiBfX1pON1dlYkNvcmU5UGFnZUdy
b3VwMTRhZGRWaXNpdGVkTGlua0VQS3RtCitfX1pON1dlYkNvcmU5UGFnZUdyb3VwMTZjbGVhclVz
ZXJDb250ZW50RXYKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXAxN2Nsb3NlTG9jYWxTdG9yYWdlRXYK
IF9fWk43V2ViQ29yZTlQYWdlR3JvdXAyMXJlbW92ZUFsbFZpc2l0ZWRMaW5rc0V2CitfX1pON1dl
YkNvcmU5UGFnZUdyb3VwMjVyZW1vdmVVc2VyQ29udGVudEZvcldvcmxkRWkKIF9fWk43V2ViQ29y
ZTlQYWdlR3JvdXAyNnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzRWIKK19fWk43V2ViQ29yZTlQ
YWdlR3JvdXA5cGFnZUdyb3VwRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTlUaW1lckJhc2U0
c3RvcEV2CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNXN0YXJ0RWRkCiBfX1pON1dlYkNvcmU5VGlt
ZXJCYXNlQzJFdgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQyMzcsNiArNDIzNyw4IEBACiAJCUJDOUJDNjRF
MEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBT
Y3JvbGxiYXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0ExNjlBMjBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9u
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5j
cHAgKi87IH07CiAJCUJDQTE2OUEzMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5o
ICovOyB9OworCQlCQ0EyQjA2MTEwNTA0NzYwMDA0M0JEMUMgLyogVXNlclNjcmlwdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMkIwNjAxMDUwNDc1
RjAwNDNCRDFDIC8qIFVzZXJTY3JpcHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlCQ0EyQjA4QjEwNTA1QkNEMDA0M0JEMUMgLyogVXNlclNjcmlw
dFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0EyQjA4QTEwNTA1QkNEMDA0M0JEMUMgLyogVXNlclNjcmlwdFR5cGVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBODNFNEYwRDdDRTFFOTAw
MzQyMUE4IC8qIEpTQ2xpcGJvYXJkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQTgzRTREMEQ3Q0UxRTkwMDM0MjFBOCAvKiBKU0NsaXBib2FyZC5j
cHAgKi87IH07CiAJCUJDQTgzRTUwMEQ3Q0UxRTkwMDM0MjFBOCAvKiBKU0NsaXBib2FyZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBODNFNEUwRDdD
RTFFOTAwMzQyMUE4IC8qIEpTQ2xpcGJvYXJkLmggKi87IH07CiAJCUJDQTgzRTUyMEQ3Q0UyMDUw
MDM0MjFBOCAvKiBKU0NsaXBib2FyZEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4M0U1MTBEN0NFMjA1MDAzNDIxQTggLyogSlNDbGlw
Ym9hcmRDdXN0b20uY3BwICovOyB9OwpAQCAtOTI0Nyw2ICs5MjQ5LDggQEAKIAkJQkM5QkM2NEQw
RTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMTY5QTAwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ExNjlB
MTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0EyQjA2MDEwNTA0NzVGMDA0M0JEMUMgLyog
VXNlclNjcmlwdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyU2NyaXB0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQTJCMDhBMTA1MDVCQ0QwMDQzQkQx
QyAvKiBVc2VyU2NyaXB0VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VXNlclNjcmlwdFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTM3OEJB
MEQxNUY2NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2NoZWR1bGVkQWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlZHVsZWRBY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBODNFMzYwRDdDREM0RTAwMzQyMUE4IC8q
IENsaXBib2FyZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2xpcGJvYXJkLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwODk3LDYgKzEwOTAxLDggQEAKIAkJCQlCQ0Qw
RTBGOTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW5IYXNoLmggKi8sCiAJCQkJMTRD
OUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCAqLywKIAkJCQlGNTg3ODYzQTAy
REUzQTE0MDFFQTQxMjIgLyogU2V0dGluZ3MuaCAqLywKKwkJCQlCQ0EyQjA2MDEwNTA0NzVGMDA0
M0JEMUMgLyogVXNlclNjcmlwdC5oICovLAorCQkJCUJDQTJCMDhBMTA1MDVCQ0QwMDQzQkQxQyAv
KiBVc2VyU2NyaXB0VHlwZXMuaCAqLywKIAkJCQk0OTRCRDc5MzBGNTVDOEVFMDA3NDc4MjggLyog
V2ViS2l0UG9pbnQuaCAqLywKIAkJCQk0OTRCRDc5NDBGNTVDOEVFMDA3NDc4MjggLyogV2ViS2l0
UG9pbnQuaWRsICovLAogCQkJCUJDODI0M0U2MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0
dXJlcy5jcHAgKi8sCkBAIC0xNzU3OSw2ICsxNzU4NSw4IEBACiAJCQkJNDlDN0I5RTMxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1NoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RTYx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5
QzdCQTAwMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQlCQ0EyQjA2MTEwNTA0NzYwMDA0M0JEMUMgLyogVXNlclNjcmlwdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkNBMkIwOEIxMDUwNUJDRDAwNDNCRDFDIC8qIFVzZXJTY3JpcHRUeXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTEyODRCQjExMDQ0OUZGQTAwRUFFQjUyIC8qIEpTUGFnZVRyYW5z
aXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyODRCRDYxMDQ0QTAxRTAwRUFFQjUy
IC8qIERPTVBhZ2VUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEQ0QTM0
MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCBpbiBIZWFkZXJzICov
LApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA0ODAzMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsMTQgQEAgU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGUoYwogICAgIHJldHVybiBKU1ZhbHVlKCk7CiB9CiAKK3ZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld1dvcmxkKGludCAvKiB3b3JsZElEICovLCBjb25zdCBW
ZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZUNvZGUpIAoreworICAgIC8vIEZJWE1FOiBB
Y3R1YWxseSBzdXBwb3J0IGlzb2xhdGVkIHdvcmxkcyEKKyAgICB1bnNpZ25lZCBzaXplID0gc291
cmNlQ29kZS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
KyAgICAgICAgZXZhbHVhdGUoc291cmNlQ29kZVtpXSk7Cit9CisKIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgpCiB7CiAgICAgaWYgKCFtX3dpbmRvd1NoZWxsKQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ4MDMwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFNjcmlwdFZhbHVlIGV2YWx1
YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKKyAgICB2b2lkIGV2YWx1YXRlSW5OZXdXb3Js
ZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+Jik7CiAKICAgICB2
b2lkIHNldEV2ZW50SGFuZGxlckxpbmVOdW1iZXIoaW50IGxpbmVubykgeyBtX2hhbmRsZXJMaW5l
TnVtYmVyID0gbGluZW5vOyB9CiAgICAgaW50IGV2ZW50SGFuZGxlckxpbmVOdW1iZXIoKSB7IHJl
dHVybiBtX2hhbmRsZXJMaW5lTnVtYmVyOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShy
ZXZpc2lvbiA0ODAzMCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIxMyw2ICsxMjEzLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZmluaXNoZWRQ
YXJzaW5nKCkKICAgICBpZiAobV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KQogICAgICAg
ICByZXR1cm47CiAKKyAgICBtX2ZyYW1lLT5pbmplY3RVc2VyU2NyaXB0cyhJbmplY3RBdERvY3Vt
ZW50RW5kKTsKKwogICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBGcmFtZSdzIGRl
c3RydWN0b3IsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbid0IHByb3RlY3Qgb3Vyc2VsdmVzCiAg
ICAgLy8gYmVjYXVzZSBkb2luZyBzbyB3aWxsIGNhdXNlIHVzIHRvIHJlLWVudGVyIHRoZSBkZXN0
cnVjdG9yIHdoZW4gcHJvdGVjdG9yIGdvZXMgb3V0IG9mIHNjb3BlLgogICAgIC8vIE51bGwtY2hl
Y2tpbmcgdGhlIEZyYW1lVmlldyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3Qgd2UncmUgaW4gdGhl
IGRlc3RydWN0b3IuCkBAIC01MTA3LDYgKzUxMDksNyBAQCBTdHJpbmcgRnJhbWVMb2FkZXI6OnJl
ZmVycmVyKCkgY29uc3QKIAogdm9pZCBGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hEb2N1bWVudEVsZW1l
bnRBdmFpbGFibGUoKQogeworICAgIG1fZnJhbWUtPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0
RG9jdW1lbnRTdGFydCk7CiAgICAgbV9jbGllbnQtPmRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgp
OwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIk5hdmlnYXRv
ci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAi
UmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtNjcsNiArNjgs
OCBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2Rl
LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIK
QEAgLTg0MSw2ICs4NDQsMzcgQEAgdm9pZCBGcmFtZTo6cmVhcHBseVN0eWxlcygpCiAgICAgbV9k
b2MtPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKIH0KIAordm9pZCBGcmFtZTo6aW5qZWN0VXNlclNj
cmlwdHMoVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKK3sKKyAgICBBU1NF
UlQobV9wYWdlKTsKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IC8vIFdhbGsgdGhlIGhhc2h0YWJsZS4gSW5qZWN0IGJ5IHdvcmxkLgorICAgIGNvbnN0IFVzZXJT
Y3JpcHRNYXAqIHVzZXJTY3JpcHRzID0gbV9wYWdlLT5ncm91cCgpLnVzZXJTY3JpcHRzKCk7Cisg
ICAgaWYgKCF1c2VyU2NyaXB0cykKKyAgICAgICAgcmV0dXJuOworICAgIFVzZXJTY3JpcHRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHVzZXJTY3JpcHRzLT5lbmQoKTsKKyAgICBmb3IgKFVzZXJT
Y3JpcHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdXNlclNjcmlwdHMtPmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChpdC0+Zmlyc3Qs
ICppdC0+c2Vjb25kLCBpbmplY3Rpb25UaW1lKTsKK30KKwordm9pZCBGcmFtZTo6aW5qZWN0VXNl
clNjcmlwdHNGb3JXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYgdXNl
clNjcmlwdHMsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCit7CisgICAg
Ly8gTWFrZSBhIHZlY3RvciBvZiBzY3JpcHQgc291cmNlIGNvZGVzLiAgQ2FsbCBldmFsdWF0ZUlu
TmV3V29ybGQgb24gdGhlIHNldCBvZiBzY3JpcHRzLgorICAgIC8vIEZJWE1FOiBOZWVkIHRvIGlt
cGxlbWVudCBwYXR0ZXJuIGNoZWNraW5nLgorICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBz
b3VyY2VDb2RlOworICAgIHVuc2lnbmVkIGNvdW50ID0gdXNlclNjcmlwdHMuc2l6ZSgpOworICAg
IGlmIChjb3VudCA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgVXNlclNjcmlwdCogc2NyaXB0ID0gdXNlclNj
cmlwdHNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChzY3JpcHQtPmluamVjdGlvblRpbWUoKSA9PSBp
bmplY3Rpb25UaW1lKQorICAgICAgICAgICAgc291cmNlQ29kZS5hcHBlbmQoU2NyaXB0U291cmNl
Q29kZShzY3JpcHQtPnNvdXJjZSgpLCBzY3JpcHQtPnVybCgpKSk7CisgICAgfQorICAgIHNjcmlw
dCgpLT5ldmFsdWF0ZUluTmV3V29ybGQod29ybGRJRCwgc291cmNlQ29kZSk7Cit9CisKIGJvb2wg
RnJhbWU6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdT
ZWxlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5
KCksIGZhbHNlKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiA0ODAzMCkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsQmVo
YXZpb3IuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4
dEdyYW51bGFyaXR5LmgiCisjaW5jbHVkZSAiVXNlclNjcmlwdFR5cGVzLmgiCiAKICNpZiBQTEFU
Rk9STShXSU4pCiAjaW5jbHVkZSAiRnJhbWVXaW4uaCIKQEAgLTEyOSw2ICsxMzAsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYs
IGNvbnN0IENvbG9yJiwgYm9vbCwgY29uc3QgSW50U2l6ZSAmLCBib29sLAogICAgICAgICAgICAg
ICAgICAgICAgICAgU2Nyb2xsYmFyTW9kZSA9IFNjcm9sbGJhckF1dG8sIFNjcm9sbGJhck1vZGUg
PSBTY3JvbGxiYXJBdXRvKTsKIAorICAgICAgICB2b2lkIGluamVjdFVzZXJTY3JpcHRzKFVzZXJT
Y3JpcHRJbmplY3Rpb25UaW1lKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgaW5qZWN0
VXNlclNjcmlwdHNGb3JXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVXNlclNjcmlwdFZlY3RvciYs
IFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIEZyYW1l
KFBhZ2UqLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCopOwpJbmRl
eDogV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDExIEBAIFBhZ2VHcm91cDo6UGFnZUdy
b3VwKFBhZ2UqIHBhZ2UpCiAgICAgYWRkUGFnZShwYWdlKTsKIH0KIAorUGFnZUdyb3VwOjp+UGFn
ZUdyb3VwKCkKK3sKKyAgICBjbGVhclVzZXJDb250ZW50KCk7Cit9CisKIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFBhZ2VHcm91cCo+IFBhZ2VHcm91cE1hcDsKIHN0YXRpYyBQYWdlR3JvdXBNYXAq
IHBhZ2VHcm91cHMgPSAwOwogCkBAIC0xOTMsNCArMTk4LDM3IEBAIFN0b3JhZ2VOYW1lc3BhY2Uq
IFBhZ2VHcm91cDo6bG9jYWxTdG9yYWcKIH0KICNlbmRpZgogCit2b2lkIFBhZ2VHcm91cDo6YWRk
VXNlclNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGF0dGVybnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHdvcmxkSUQsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIGluamVjdGlvblRpbWUpCit7Cisg
ICAgUGFzc093blB0cjxVc2VyU2NyaXB0PiB1c2VyU2NyaXB0KG5ldyBVc2VyU2NyaXB0KHNvdXJj
ZSwgdXJsLCBwYXR0ZXJucywgd29ybGRJRCwgaW5qZWN0aW9uVGltZSkpOworICAgIFVzZXJTY3Jp
cHRWZWN0b3IqIHNjcmlwdHNJbldvcmxkOworICAgIGlmICghbV91c2VyU2NyaXB0cykKKyAgICAg
ICAgbV91c2VyU2NyaXB0cy5zZXQobmV3IFVzZXJTY3JpcHRNYXApOworICAgIHNjcmlwdHNJbldv
cmxkID0gbV91c2VyU2NyaXB0cy0+Z2V0KHdvcmxkSUQpOworICAgIGlmICghc2NyaXB0c0luV29y
bGQpCisgICAgICAgIHNjcmlwdHNJbldvcmxkID0gbmV3IFVzZXJTY3JpcHRWZWN0b3I7CisgICAg
c2NyaXB0c0luV29ybGQtPmFwcGVuZCh1c2VyU2NyaXB0KTsKKyAgICBtX3VzZXJTY3JpcHRzLT5z
ZXQod29ybGRJRCwgc2NyaXB0c0luV29ybGQpOworfQorCit2b2lkIFBhZ2VHcm91cDo6cmVtb3Zl
VXNlckNvbnRlbnRGb3JXb3JsZChpbnQgd29ybGRJRCkKK3sKKyAgICBpZiAobV91c2VyU2NyaXB0
cykgeworICAgICAgICBVc2VyU2NyaXB0VmVjdG9yKiBzY3JpcHRzSW5Xb3JsZCA9IG1fdXNlclNj
cmlwdHMtPmdldCh3b3JsZElEKTsKKyAgICAgICAgaWYgKHNjcmlwdHNJbldvcmxkKSB7CisgICAg
ICAgICAgICBtX3VzZXJTY3JpcHRzLT5yZW1vdmUod29ybGRJRCk7CisgICAgICAgICAgICBkZWxl
dGUgc2NyaXB0c0luV29ybGQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUGFnZUdyb3Vw
OjpjbGVhclVzZXJDb250ZW50KCkKK3sKKyAgICBpZiAobV91c2VyU2NyaXB0cykgeworICAgICAg
ICBkZWxldGVBbGxWYWx1ZXMoKm1fdXNlclNjcmlwdHMpOworICAgICAgICBtX3VzZXJTY3JpcHRz
LmNsZWFyKCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91
cC5oCShyZXZpc2lvbiA0ODAzMCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
I2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUg
IlVzZXJTY3JpcHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw2ICs0Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFBhZ2VHcm91cChjb25z
dCBTdHJpbmcmIG5hbWUpOwogICAgICAgICBQYWdlR3JvdXAoUGFnZSopOworICAgICAgICB+UGFn
ZUdyb3VwKCk7CiAKICAgICAgICAgc3RhdGljIFBhZ2VHcm91cCogcGFnZUdyb3VwKGNvbnN0IFN0
cmluZyYgZ3JvdXBOYW1lKTsKICAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VMb2NhbFN0b3JhZ2Uo
KTsKQEAgLTY3LDYgKzY5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBo
YXNMb2NhbFN0b3JhZ2UoKSB7IHJldHVybiBtX2xvY2FsU3RvcmFnZTsgfQogI2VuZGlmCiAKKyAg
ICAgICAgdm9pZCBhZGRVc2VyU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJM
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdHRlcm5zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHdvcmxkSUQsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lKTsKKyAgICAgICAgY29u
c3QgVXNlclNjcmlwdE1hcCogdXNlclNjcmlwdHMoKSBjb25zdCB7IHJldHVybiBtX3VzZXJTY3Jp
cHRzLmdldCgpOyB9CisKKyAgICAgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEZvcldvcmxkKGlu
dCk7CisgICAgICAgIHZvaWQgY2xlYXJVc2VyQ29udGVudCgpOworICAgICAgICAKICAgICBwcml2
YXRlOgogICAgICAgICB2b2lkIGFkZFZpc2l0ZWRMaW5rKExpbmtIYXNoIHN0cmluZ0hhc2gpOwog
CkBAIC04MSw2ICs5MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAgICAgICAgIFJlZlB0cjxTdG9yYWdlTmFtZXNwYWNlPiBtX2xvY2FsU3RvcmFnZTsK
ICNlbmRpZgorCisgICAgICAgIE93blB0cjxVc2VyU2NyaXB0TWFwPiBtX3VzZXJTY3JpcHRzOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9Vc2Vy
U2NyaXB0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1VzZXJTY3JpcHQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGFnZS9Vc2VyU2NyaXB0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworIAorI2lmbmRlZiBVc2VyU2NyaXB0X2gKKyNkZWZpbmUgVXNlclNj
cmlwdF9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVXNlclNjcmlwdFR5cGVzLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBVc2VyU2NyaXB0IHsKK3B1YmxpYzoKKyAgICBVc2Vy
U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBLVVJMJiB1cmwsCisgICAgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0dGVybnMsIGludCB3b3JsZElELAorICAgICAg
ICAgICAgICAgVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKKyAgICA6IG1f
c291cmNlKHNvdXJjZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fcGF0dGVybnMocGF0dGVy
bnMpCisgICAgLCBtX3dvcmxkSUQod29ybGRJRCkKKyAgICAsIG1faW5qZWN0aW9uVGltZShpbmpl
Y3Rpb25UaW1lKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyBy
ZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0dGVybnMoKSBjb25z
dCB7IHJldHVybiBtX3BhdHRlcm5zOyB9CisgICAgaW50IHdvcmxkSUQoKSBjb25zdCB7IHJldHVy
biBtX3dvcmxkSUQ7IH0KKyAgICBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1l
KCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3Rpb25UaW1lOyB9CisgICAgCitwcml2YXRlOgorICAg
IFN0cmluZyBtX3NvdXJjZTsKKyAgICBLVVJMIG1fdXJsOworICAgIFZlY3RvcjxTdHJpbmc+IG1f
cGF0dGVybnM7CisgICAgaW50IG1fd29ybGRJRDsKKyAgICBVc2VyU2NyaXB0SW5qZWN0aW9uVGlt
ZSBtX2luamVjdGlvblRpbWU7Cit9OworCit9IC8vIG5hbXNlcGFjZSBXZWJDb3JlCisgCisjZW5k
aWYgLy8gVXNlclNjcmlwdF9oCkluZGV4OiBXZWJDb3JlL3BhZ2UvVXNlclNjcmlwdFR5cGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1VzZXJTY3JpcHRUeXBlcy5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wYWdlL1VzZXJTY3JpcHRUeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyAKKyNpZm5kZWYgVXNlclNjcmlwdFR5cGVzX2gKKyNkZWZpbmUg
VXNlclNjcmlwdFR5cGVzX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gVXNlclNjcmlwdElu
amVjdGlvblRpbWUgeyBJbmplY3RBdERvY3VtZW50U3RhcnQsIEluamVjdEF0RG9jdW1lbnRFbmQg
fTsKKworY2xhc3MgVXNlclNjcmlwdDsKKwordHlwZWRlZiBWZWN0b3I8T3duUHRyPFVzZXJTY3Jp
cHQ+ID4gVXNlclNjcmlwdFZlY3RvcjsKK3R5cGVkZWYgSGFzaE1hcDxpbnQsIFVzZXJTY3JpcHRW
ZWN0b3IqPiBVc2VyU2NyaXB0TWFwOworCit9IC8vIG5hbXNlcGFjZSBXZWJDb3JlCisgCisjZW5k
aWYgLy8gVXNlclNjcmlwdFR5cGVzX2gKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biA0ODAzMCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTA4LDYgKzIxMDgsNTMgQEAgc3RhdGljIGlubGluZSBJTVAgZ2V0TWV0aG9kKGlkIG8s
IFNFTCBzKQogICAgICAgICBfcHJpdmF0ZS0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFj
dGl2ZShbW3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10pOwogfQogCisrICh2b2lkKV9hZGRVc2Vy
U2NyaXB0VG9Hcm91cDooTlNTdHJpbmcgKilncm91cE5hbWUgc291cmNlOihOU1N0cmluZyAqKXNv
dXJjZSB1cmw6KE5TVVJMICopdXJsIHdvcmxkSUQ6KGludCl3b3JsZElEIHBhdHRlcm5zOihOU0Fy
cmF5ICopcGF0dGVybnMgaW5qZWN0aW9uVGltZTooV2ViVXNlclNjcmlwdEluamVjdGlvblRpbWUp
aW5qZWN0aW9uVGltZQoreworICAgIFN0cmluZyBncm91cChncm91cE5hbWUpOworICAgIGlmIChn
cm91cC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBQYWdlR3JvdXAqIHBh
Z2VHcm91cCA9IFBhZ2VHcm91cDo6cGFnZUdyb3VwKGdyb3VwKTsKKyAgICBpZiAoIXBhZ2VHcm91
cCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIENvbnZlcnQgdGhlIHBhdHRlcm5zIGlu
dG8gYSBWZWN0b3IuCisgICAgVmVjdG9yPFN0cmluZz4gcGF0dGVybnNWZWN0b3I7CisgICAgdW5z
aWduZWQgY291bnQgPSBbcGF0dGVybnMgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlmIChbW3BhdHRlcm5zIG9iamVjdEF0SW5kZXg6
aV0gaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgICAgIHBhdHRlcm5z
VmVjdG9yLmFwcGVuZChTdHJpbmcoKE5TU3RyaW5nKilbcGF0dGVybnMgb2JqZWN0QXRJbmRleDpp
XSkpOworICAgIH0KKyAgICAKKyAgICBwYWdlR3JvdXAtPmFkZFVzZXJTY3JpcHQoc291cmNlLCB1
cmwsIHBhdHRlcm5zVmVjdG9yLCB3b3JsZElELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5qZWN0aW9uVGltZSA9PSBXZWJJbmplY3RBdERvY3VtZW50U3RhcnQgPyBJbmplY3RBdERv
Y3VtZW50U3RhcnQgOiBJbmplY3RBdERvY3VtZW50RW5kKTsKK30KKworKyAodm9pZClfcmVtb3Zl
VXNlckNvbnRlbnRGcm9tR3JvdXA6KE5TU3RyaW5nICopZ3JvdXBOYW1lIHdvcmxkSUQ6KGludCl3
b3JsZElECit7CisgICAgU3RyaW5nIGdyb3VwKGdyb3VwTmFtZSk7CisgICAgaWYgKGdyb3VwLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBhZ2VHcm91cCogcGFnZUdyb3Vw
ID0gUGFnZUdyb3VwOjpwYWdlR3JvdXAoZ3JvdXApOworICAgIGlmICghcGFnZUdyb3VwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBwYWdlR3JvdXAtPnJlbW92ZVVzZXJDb250ZW50Rm9yV29ybGQo
d29ybGRJRCk7Cit9CisKKysgKHZvaWQpX2NsZWFyVXNlckNvbnRlbnRGcm9tR3JvdXA6KE5TU3Ry
aW5nICopZ3JvdXBOYW1lCit7CisgICAgU3RyaW5nIGdyb3VwKGdyb3VwTmFtZSk7CisgICAgaWYg
KGdyb3VwLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBhZ2VHcm91cCog
cGFnZUdyb3VwID0gUGFnZUdyb3VwOjpwYWdlR3JvdXAoZ3JvdXApOworICAgIGlmICghcGFnZUdy
b3VwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcGFnZUdyb3VwLT5jbGVhclVzZXJDb250
ZW50KCk7Cit9CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDQ4MDMwKQorKysgV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYg
Kzc2LDExIEBAIHR5cGVkZWYgZW51bSB7CiB9IFdlYkRhc2hib2FyZEJlaGF2aW9yOwogI2VuZGlm
CiAKK3R5cGVkZWYgZW51bSB7CisgICAgV2ViSW5qZWN0QXREb2N1bWVudFN0YXJ0LAorICAgIFdl
YkluamVjdEF0RG9jdW1lbnRFbmQsCit9IFdlYlVzZXJTY3JpcHRJbmplY3Rpb25UaW1lOworCiBA
aW50ZXJmYWNlIFdlYkNvbnRyb2xsZXIgOiBOU1RyZWVDb250cm9sbGVyIHsKICAgICBJQk91dGxl
dCBXZWJWaWV3ICp3ZWJWaWV3OwogfQpAQCAtNDUyLDYgKzQ1NywxMCBAQCBDb3VsZCBiZSB3b3J0
aCBhZGRpbmcgdG8gdGhlIEFQSS4KIC8vIFJlbW92ZXMgYWxsIHdoaXRlIGxpc3QgZW50cmllcyBj
cmVhdGVkIHdpdGggX3doaXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4uCiArICh2b2lkKV9yZXNldE9y
aWdpbkFjY2Vzc1doaXRlTGlzdHM7CiAKKysgKHZvaWQpX2FkZFVzZXJTY3JpcHRUb0dyb3VwOihO
U1N0cmluZyAqKWdyb3VwTmFtZSBzb3VyY2U6KE5TU3RyaW5nICopc291cmNlIHVybDooTlNVUkwg
Kil1cmwgd29ybGRJRDooaW50KXdvcmxkSUQgcGF0dGVybnM6KE5TQXJyYXkgKilwYXR0ZXJucyBp
bmplY3Rpb25UaW1lOihXZWJVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSlpbmplY3Rpb25UaW1lOwor
KyAodm9pZClfcmVtb3ZlVXNlckNvbnRlbnRGcm9tR3JvdXA6KE5TU3RyaW5nICopZ3JvdXBOYW1l
IHdvcmxkSUQ6KGludCl3b3JsZElEOworKyAodm9pZClfY2xlYXJVc2VyQ29udGVudEZyb21Hcm91
cDooTlNTdHJpbmcgKilncm91cE5hbWU7CisKIEBlbmQKIAogQGludGVyZmFjZSBXZWJWaWV3IChX
ZWJWaWV3UHJpbnRpbmdQcml2YXRlKQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDgwMzApCisrKyBX
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkwNSw2ICs5MDUsMjAgQEAgc3RhdGljIEpTVmFsdWVSZWYgd2hpdGVMaXN0
QWNjZXNzRnJvbU9yaQogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IH0KIAorc3RhdGljIEpTVmFsdWVSZWYgYWRkVXNlclNjcmlwdENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFy
Z3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAyKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgCisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNvdXJjZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgYm9v
bCBydW5BdFN0YXJ0ID0gSlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMV0pOwor
ICAgIAorICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIGNvbnRyb2xsZXItPmFkZFVzZXJTY3JpcHQoc291cmNlLmdldCgpLCBydW5BdFN0YXJ0KTsK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisgCiAvLyBTdGF0
aWMgVmFsdWVzCiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGdldEdsb2JhbEZsYWdDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNTdHJpbmdSZWYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkBAIC05ODEsNiArOTk1LDcgQEAgSlNT
dGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogewogICAgIHN0YXRpYyBKU1N0
YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewogICAgICAgICB7ICJhZGREaXNhbGxv
d2VkVVJMIiwgYWRkRGlzYWxsb3dlZFVSTENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImFk
ZFVzZXJTY3JpcHQiLCBhZGRVc2VyU2NyaXB0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
Y2xlYXJBbGxEYXRhYmFzZXMiLCBjbGVhckFsbERhdGFiYXNlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgImNsZWFyQmFja0ZvcndhcmRMaXN0IiwgY2xlYXJCYWNrRm9yd2FyZExpc3RDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCIs
IGNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gNDgwMzApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNiArMTg1LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCB3aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKEpTU3RyaW5nUmVmIHNvdXJjZU9y
aWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGlu
YXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKIAorICAgIHZvaWQg
YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCk7CisKIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2R1bXBBc1RleHQ7CiAgICAgYm9vbCBtX2R1bXBBc1BERjsKSW5k
ZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0JKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc4LDYgKzEwNzgsNyBAQCBzdGF0
aWMgdm9pZCByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0CiAgICAgW3dlYlZpZXcgX3NldERh
c2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yVXNlQmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSB0bzpOT107CiAgICAgW3dlYlZpZXcgX2NsZWFyTWFpbkZyYW1lTmFtZV07CiAgICAg
W1t3ZWJWaWV3IHVuZG9NYW5hZ2VyXSByZW1vdmVBbGxBY3Rpb25zXTsKKyAgICBbV2ViVmlldyBf
Y2xlYXJVc2VyQ29udGVudEZyb21Hcm91cDpbd2ViVmlldyBncm91cE5hbWVdXTsKIAogICAgIHJl
c2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKIApJbmRleDogV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5t
bQkocmV2aXNpb24gNDgwMzApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5
b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2NCwzICs0NjQsMTAg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2hpdGVMaXN0QWNjZQogICAgIE5TU3RyaW5n
ICpkZXN0aW5hdGlvbkhvc3ROUyA9IChOU1N0cmluZyAqKWhvc3RDRi5nZXQoKTsKICAgICBbV2Vi
VmlldyBfd2hpdGVMaXN0QWNjZXNzRnJvbU9yaWdpbjpzb3VyY2VPcmlnaW5OUyBkZXN0aW5hdGlv
blByb3RvY29sOmRlc3RpbmF0aW9uUHJvdG9jb2xOUyBkZXN0aW5hdGlvbkhvc3Q6ZGVzdGluYXRp
b25Ib3N0TlMgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnM6YWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnNdOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpT
U3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0KQoreworICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc291cmNlQ0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgc291cmNlKSk7CisgICAgTlNTdHJpbmcgKnNvdXJjZU5TID0gKE5TU3RyaW5n
ICopc291cmNlQ0YuZ2V0KCk7CisgICAgW1dlYlZpZXcgX2FkZFVzZXJTY3JpcHRUb0dyb3VwOkAi
b3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIgc291cmNlOnNvdXJjZU5TIHVybDpuaWwgd29ybGRJ
RDoxIHBhdHRlcm5zOm5pbCBpbmplY3Rpb25UaW1lOihydW5BdFN0YXJ0ID8gV2ViSW5qZWN0QXRE
b2N1bWVudFN0YXJ0IDogV2ViSW5qZWN0QXREb2N1bWVudEVuZCldOworfQpJbmRleDogV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwCShyZXZpc2lvbiA0ODAzMCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
MSwzICs4MzEsOCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3aGl0ZUxpc3RBY2NlCiB7
CiAgICAgcHJpbnRmKCJMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2hpdGVMaXN0QWNjZXNzRnJvbU9y
aWdpbiBub3QgaW1wbGVtZW50ZWRcbiIpOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0KQorewor
ICAgIHByaW50ZigiTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQgbm90IGltcGxl
bWVudGVkLlxuIik7Cit9CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkocmV2aXNpb24gNDgwMzApCisr
KyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDMgKzI3Nyw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om92ZXJyaWRlUHJlZmUKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBi
b29sIHJ1bkF0U3RhcnQpCit7CisgICAgcHJpbnRmKCJMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
VXNlclNjcmlwdCBub3QgaW1wbGVtZW50ZWQuXG4iKTsKK30KSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy91c2Vyc2NyaXB0cy9zY3JpcHQtcnVuLWF0LWVuZC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3VzZXJzY3JpcHRzL3NjcmlwdC1y
dW4tYXQtZW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy91c2Vyc2NyaXB0cy9zY3JpcHQtcnVuLWF0LWVuZC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEgQEAKK1BBU1MKSW5kZXg6IExheW91dFRlc3RzL3VzZXJzY3JpcHRz
L3NjcmlwdC1ydW4tYXQtZW5kLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvdXNlcnNj
cmlwdHMvc2NyaXB0LXJ1bi1hdC1lbmQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3VzZXJzY3JpcHRzL3NjcmlwdC1ydW4tYXQtZW5kLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmFkZFVzZXJTY3JpcHQoImRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKS5pbm5lckhUTUwgPSAnUEFTUyciLCBmYWxz
ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0idGFyZ2V0Ij5GQUlM
PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="20035"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39024</attachid>
            <date>2009-09-03 17:57:14 -0700</date>
            <delta_ts>2009-09-04 07:01:08 -0700</delta_ts>
            <desc>Patch that is ready for official review</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33999</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODAzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDktMDktMDMgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4ODkwLCBtYWtlIHNpbXBsZSB1c2Vy
IHNjcmlwdCBpbmplY3Rpb24gd29yay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWRk
cyBuZXcgQVBJIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIHVzZXIgc2NyaXB0cyBmcm9tIHBhZ2Ug
Z3JvdXBzLiAgVXNlciBzY3JpcHRzCisgICAgICAgIGFyZSBidW5kbGVkIHRvZ2V0aGVyIGluIGlz
b2xhdGVkIHdvcmxkcyAoeW91IGNhbiBoYXZlIG11bHRpcGxlIHNjcmlwdHMgdG9nZXRoZXIgaW4g
dGhlIHNhbWUKKyAgICAgICAgd29ybGQpLgorCisgICAgICAgIEFkZGVkIHVzZXJzY3JpcHRzLyBk
aXJlY3RvcnkgZm9yIGhvbGRpbmcgbmV3IHRlc3RzIChhbG9uZyB3aXRoIGEgc2ltcGxlIHRlc3Qg
b2Ygc2NyaXB0IGluamVjdGlvbikuCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAg
ICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIGxv
YWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Zmlu
aXNoZWRQYXJzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaXNwYXRjaERv
Y3VtZW50RWxlbWVudEF2YWlsYWJsZSk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6aW5qZWN0VXNlclNjcmlwdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlR3JvdXA6On5QYWdlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUdyb3VwOjphZGRV
c2VyU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6cmVtb3ZlVXNlckNvbnRl
bnRGb3JXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OnJlbW92ZUFsbFVzZXJD
b250ZW50KToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5oOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjp1c2VyU2NyaXB0cyk6CisgICAgICAgICogcGFnZS9Vc2VyU2NyaXB0Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6VXNlclNjcmlwdDo6VXNlclNjcmlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyU2NyaXB0Ojpzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6VXNlclNj
cmlwdDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJTY3JpcHQ6OnBhdHRlcm5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlVzZXJTY3JpcHQ6OndvcmxkSUQpOgorICAgICAgICAoV2ViQ29yZTo6
VXNlclNjcmlwdDo6aW5qZWN0aW9uVGltZSk6CisgICAgICAgICogcGFnZS9Vc2VyU2NyaXB0VHlw
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDA5LTA5LTAzICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDgwMzApCisrKyBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MiwxMCArNzQyLDE0IEBAIF9fWk43V2Vi
Q29yZTlIVE1MTmFtZXM5aWZyYW1lVGFnRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczlzY3JpcHRU
YWdFCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMTFzZXRDYXBhY2l0eUVpCiBfX1pON1dlYkNvcmU5
UGFnZUNhY2hlMjdyZWxlYXNlQXV0b3JlbGVhc2VkUGFnZXNOb3dFdgorX19aTjdXZWJDb3JlOVBh
Z2VHcm91cDEzYWRkVXNlclNjcmlwdEVSS05TXzZTdHJpbmdFUktOU180S1VSTEVSS04zV1RGNlZl
Y3RvcklTMV9MbTBFRUVpTlNfMjNVc2VyU2NyaXB0SW5qZWN0aW9uVGltZUUKIF9fWk43V2ViQ29y
ZTlQYWdlR3JvdXAxNGFkZFZpc2l0ZWRMaW5rRVBLdG0KK19fWk43V2ViQ29yZTlQYWdlR3JvdXAy
MHJlbW92ZUFsbFVzZXJDb250ZW50RXYKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXAxN2Nsb3NlTG9j
YWxTdG9yYWdlRXYKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXAyMXJlbW92ZUFsbFZpc2l0ZWRMaW5r
c0V2CitfX1pON1dlYkNvcmU5UGFnZUdyb3VwMjVyZW1vdmVVc2VyQ29udGVudEZvcldvcmxkRWkK
IF9fWk43V2ViQ29yZTlQYWdlR3JvdXAyNnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzRWIKK19f
Wk43V2ViQ29yZTlQYWdlR3JvdXA5cGFnZUdyb3VwRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29y
ZTlUaW1lckJhc2U0c3RvcEV2CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNXN0YXJ0RWRkCiBfX1pO
N1dlYkNvcmU5VGltZXJCYXNlQzJFdgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCShyZXZpc2lvbiA0ODAzMCkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MTE2LDYgKzE3MTE2LDE0IEBACiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwYWdlXFNldHRpbmdzLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQorICAg
ICAgICAgICAgICAgICAgICAgICAgPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFVz
ZXJTY3JpcHQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisgICAgICAgICAgICAgICAgICAgICAg
ICA8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcVXNlclNjcmlwdFR5cGVzLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdl
XFdlYktpdFBvaW50LmgiDQogCQkJCT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDgwMzApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDIzNyw2ICs0MjM3LDgg
QEAKIAkJQkM5QkM2NEUwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QkM2NEQwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDQTE2OUEyMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hU
TUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNh
cHRpb25FbGVtZW50LmNwcCAqLzsgfTsKIAkJQkNBMTY5QTMwQkZENTVCNDAwMTlDQTc2IC8qIEpT
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQTE2OUExMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNh
cHRpb25FbGVtZW50LmggKi87IH07CisJCUJDQTJCMDYxMTA1MDQ3NjAwMDQzQkQxQyAvKiBVc2Vy
U2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0EyQjA2MDEwNTA0NzVGMDA0M0JEMUMgLyogVXNlclNjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQTJCMDhCMTA1MDVCQ0QwMDQzQkQx
QyAvKiBVc2VyU2NyaXB0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQTJCMDhBMTA1MDVCQ0QwMDQzQkQxQyAvKiBVc2VyU2NyaXB0VHlwZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0E4
M0U0RjBEN0NFMUU5MDAzNDIxQTggLyogSlNDbGlwYm9hcmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBODNFNEQwRDdDRTFFOTAwMzQyMUE4IC8q
IEpTQ2xpcGJvYXJkLmNwcCAqLzsgfTsKIAkJQkNBODNFNTAwRDdDRTFFOTAwMzQyMUE4IC8qIEpT
Q2xpcGJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0E4M0U0RTBEN0NFMUU5MDAzNDIxQTggLyogSlNDbGlwYm9hcmQuaCAqLzsgfTsKIAkJQkNB
ODNFNTIwRDdDRTIwNTAwMzQyMUE4IC8qIEpTQ2xpcGJvYXJkQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTgzRTUxMEQ3Q0UyMDUwMDM0
MjFBOCAvKiBKU0NsaXBib2FyZEN1c3RvbS5jcHAgKi87IH07CkBAIC05MjQ3LDYgKzkyNDksOCBA
QAogCQlCQzlCQzY0RDBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhckNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDQTE2OUExMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxUYWJsZUNhcHRp
b25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQTJCMDYwMTA1MDQ3
NUYwMDQzQkQxQyAvKiBVc2VyU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFVzZXJTY3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNBMkIwOEEx
MDUwNUJDRDAwNDNCRDFDIC8qIFVzZXJTY3JpcHRUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVc2VyU2NyaXB0VHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBMzc4QkEwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY2hlZHVsZWRBY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzNzhCQjBEMTVGNjQyMDBCNzkzRDYgLyog
U2NoZWR1bGVkQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjaGVk
dWxlZEFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4M0UzNjBEN0NE
QzRFMDAzNDIxQTggLyogQ2xpcGJvYXJkLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDbGlw
Ym9hcmQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA4OTcsNiArMTA5MDEs
OCBAQAogCQkJCUJDRDBFMEY5MEU5NzJDMzUwMDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbkhhc2gu
aCAqLywKIAkJCQkxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovLAog
CQkJCUY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAvKiBTZXR0aW5ncy5oICovLAorCQkJCUJDQTJC
MDYwMTA1MDQ3NUYwMDQzQkQxQyAvKiBVc2VyU2NyaXB0LmggKi8sCisJCQkJQkNBMkIwOEExMDUw
NUJDRDAwNDNCRDFDIC8qIFVzZXJTY3JpcHRUeXBlcy5oICovLAogCQkJCTQ5NEJENzkzMEY1NUM4
RUUwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5oICovLAogCQkJCTQ5NEJENzk0MEY1NUM4RUUwMDc0
NzgyOCAvKiBXZWJLaXRQb2ludC5pZGwgKi8sCiAJCQkJQkM4MjQzRTYwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCAqLywKQEAgLTE3NTc5LDYgKzE3NTg1LDggQEAKIAkJCQk0
OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0OUM3QjlFNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDlDN0JBMDAxMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUJDQTJCMDYxMTA1MDQ3NjAwMDQzQkQxQyAvKiBVc2VyU2NyaXB0
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0EyQjA4QjEwNTA1QkNEMDA0M0JEMUMgLyogVXNlclNj
cmlwdFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI4NEJCMTEwNDQ5RkZBMDBFQUVCNTIg
LyogSlNQYWdlVHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTI4NEJENjEw
NDRBMDFFMDBFQUVCNTIgLyogRE9NUGFnZVRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTEwRDRBMzQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5o
IGluIEhlYWRlcnMgKi8sCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSwxNCBAQCBTY3JpcHRWYWx1
ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjCiAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIH0K
IAordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgLyog
d29ybGRJRCAqLywgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VDb2RlKSAK
K3sKKyAgICAvLyBGSVhNRTogQWN0dWFsbHkgc3VwcG9ydCBpc29sYXRlZCB3b3JsZHMhCisgICAg
dW5zaWduZWQgc2l6ZSA9IHNvdXJjZUNvZGUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGV2YWx1YXRlKHNvdXJjZUNvZGVbaV0pOworfQor
CiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwoKQogewogICAgIGlmICgh
bV93aW5kb3dTaGVsbCkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
CShyZXZpc2lvbiA0ODAzMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CisgICAgdm9p
ZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+Jik7CiAKICAgICB2b2lkIHNldEV2ZW50SGFuZGxlckxpbmVOdW1iZXIoaW50
IGxpbmVubykgeyBtX2hhbmRsZXJMaW5lTnVtYmVyID0gbGluZW5vOyB9CiAgICAgaW50IGV2ZW50
SGFuZGxlckxpbmVOdW1iZXIoKSB7IHJldHVybiBtX2hhbmRsZXJMaW5lTnVtYmVyOyB9CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ4MDMw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDYgKzE3OSwxMiBAQCBib29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3Np
bmdVc2VyR2VzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4mIHNvdXJjZXMpCit7CisgICAgLy8gRklYTUU6IEl0J3Mgbm90IG9idmlvdXMg
d2hhdCBleHRlbnNpb25Hcm91cCBpcy4gIERvZXMgd29ybGQgSUQgcmVwcmVzZW50IHRoZSBzYW1l
IGNvbmNlcHQ/IC0tIGh5YXR0CisgICAgbV9wcm94eS0+ZXZhbHVhdGVJbk5ld1dvcmxkKHNvdXJj
ZXMsIHdvcmxkSUQpOworfQorCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5OZXdX
b3JsZChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNp
b25Hcm91cCkKIHsKICAgICBtX3Byb3h5LT5ldmFsdWF0ZUluTmV3V29ybGQoc291cmNlcywgZXh0
ZW5zaW9uR3JvdXApOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDQ4MDMwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEwICs2NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIC8vIGFzIGEgc3RyaW5nLgogICAgICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAKKyAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+Jik7Cisg
ICAgICAgIAogICAgICAgICAvLyBFeGVjdXRlcyBKYXZhU2NyaXB0IGluIGEgbmV3IHdvcmxkIGFz
c29jaWF0ZWQgd2l0aCB0aGUgd2ViIGZyYW1lLiBUaGUKICAgICAgICAgLy8gc2NyaXB0IGdldHMg
aXRzIG93biBnbG9iYWwgc2NvcGUsIGl0cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljCiAg
ICAgICAgIC8vIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLCBBcnJheSwgYW5kIHNvLW9uKSwg
YW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yCiAgICAgICAgIC8vIGFsbCBET00gbm9kZXMgYW5kIERP
TSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIC8vIEZJWE1FOiBNb3ZlIHRvIHVzaW5nIGV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkIGluc3RlYWQuCiAgICAgICAgIHZvaWQgZXZhbHVhdGVJbk5ld1dvcmxk
KGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7CiAK
ICAgICAgICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBpbiBhIG5ldyBjb250ZXh0IGFzc29jaWF0
ZWQgd2l0aCB0aGUgd2ViIGZyYW1lLiBUaGUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDQ4MDMwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEzLDYgKzEyMTMsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpmaW5pc2hlZFBh
cnNpbmcoKQogICAgIGlmIChtX2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpCiAgICAgICAg
IHJldHVybjsKIAorICAgIG1fZnJhbWUtPmluamVjdFVzZXJTY3JpcHRzKEluamVjdEF0RG9jdW1l
bnRFbmQpOworCiAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIEZyYW1lJ3MgZGVz
dHJ1Y3RvciwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGRuJ3QgcHJvdGVjdCBvdXJzZWx2ZXMKICAg
ICAvLyBiZWNhdXNlIGRvaW5nIHNvIHdpbGwgY2F1c2UgdXMgdG8gcmUtZW50ZXIgdGhlIGRlc3Ry
dWN0b3Igd2hlbiBwcm90ZWN0b3IgZ29lcyBvdXQgb2Ygc2NvcGUuCiAgICAgLy8gTnVsbC1jaGVj
a2luZyB0aGUgRnJhbWVWaWV3IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBpbiB0aGUg
ZGVzdHJ1Y3Rvci4KQEAgLTUxMDcsNiArNTEwOSw3IEBAIFN0cmluZyBGcmFtZUxvYWRlcjo6cmVm
ZXJyZXIoKSBjb25zdAogCiB2b2lkIEZyYW1lTG9hZGVyOjpkaXNwYXRjaERvY3VtZW50RWxlbWVu
dEF2YWlsYWJsZSgpCiB7CisgICAgbV9mcmFtZS0+aW5qZWN0VXNlclNjcmlwdHMoSW5qZWN0QXRE
b2N1bWVudFN0YXJ0KTsKICAgICBtX2NsaWVudC0+ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gNDgwMzApCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiTmF2aWdhdG9y
LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJS
ZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC02Nyw2ICs2OCw4
IEBACiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUu
aCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgpA
QCAtODQxLDYgKzg0NCwzOSBAQCB2b2lkIEZyYW1lOjpyZWFwcGx5U3R5bGVzKCkKICAgICBtX2Rv
Yy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogfQogCit2b2lkIEZyYW1lOjppbmplY3RVc2VyU2Ny
aXB0cyhVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQoreworICAgIEFTU0VS
VChtX3BhZ2UpOworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gV2FsayB0aGUgaGFzaHRhYmxlLiBJbmplY3QgYnkgd29ybGQuCisgICAgY29uc3QgVXNlclNj
cmlwdE1hcCogdXNlclNjcmlwdHMgPSBtX3BhZ2UtPmdyb3VwKCkudXNlclNjcmlwdHMoKTsKKyAg
ICBpZiAoIXVzZXJTY3JpcHRzKQorICAgICAgICByZXR1cm47CisgICAgVXNlclNjcmlwdE1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gdXNlclNjcmlwdHMtPmVuZCgpOworICAgIGZvciAoVXNlclNj
cmlwdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB1c2VyU2NyaXB0cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICBpbmplY3RVc2VyU2NyaXB0c0ZvcldvcmxkKGl0LT5maXJzdCwg
Kml0LT5zZWNvbmQsIGluamVjdGlvblRpbWUpOworfQorCit2b2lkIEZyYW1lOjppbmplY3RVc2Vy
U2NyaXB0c0ZvcldvcmxkKGludCB3b3JsZElELCBjb25zdCBVc2VyU2NyaXB0VmVjdG9yJiB1c2Vy
U2NyaXB0cywgVXNlclNjcmlwdEluamVjdGlvblRpbWUgaW5qZWN0aW9uVGltZSkKK3sKKyAgICBp
ZiAodXNlclNjcmlwdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogTmVlZCB0byBpbXBsZW1lbnQgcGF0dGVybiBjaGVja2luZy4KKyAgICBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4gc291cmNlQ29kZTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IHVzZXJTY3JpcHRz
LnNpemUoKTsKKyAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFVzZXJTY3JpcHQqIHNj
cmlwdCA9IHVzZXJTY3JpcHRzW2ldLmdldCgpOworICAgICAgICBpZiAoc2NyaXB0LT5pbmplY3Rp
b25UaW1lKCkgPT0gaW5qZWN0aW9uVGltZSkKKyAgICAgICAgICAgIHNvdXJjZUNvZGUuYXBwZW5k
KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0LT5zb3VyY2UoKSwgc2NyaXB0LT51cmwoKSkpOworICAg
IH0KKyAgICBzY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNl
Q29kZSk7Cit9CisKIGJvb2wgRnJhbWU6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNob3VsZENo
YW5nZVNlbGVjdGlvbihzZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3
U2VsZWN0aW9uLmFmZmluaXR5KCksIGZhbHNlKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiA0ODAzMCkKKysr
IFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAj
aW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5LmgiCisjaW5jbHVkZSAiVXNlclNjcmlwdFR5
cGVzLmgiCiAKICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiRnJhbWVXaW4uaCIKQEAgLTEy
OSw2ICsxMzAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNyZWF0ZVZp
ZXcoY29uc3QgSW50U2l6ZSYsIGNvbnN0IENvbG9yJiwgYm9vbCwgY29uc3QgSW50U2l6ZSAmLCBi
b29sLAogICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyTW9kZSA9IFNjcm9sbGJhckF1
dG8sIFNjcm9sbGJhck1vZGUgPSBTY3JvbGxiYXJBdXRvKTsKIAorICAgICAgICB2b2lkIGluamVj
dFVzZXJTY3JpcHRzKFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgaW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
VXNlclNjcmlwdFZlY3RvciYsIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lKTsKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIEZyYW1lKFBhZ2UqLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxv
YWRlckNsaWVudCopOwpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2Vi
Q29yZS9wYWdlL1BhZ2VHcm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDExIEBA
IFBhZ2VHcm91cDo6UGFnZUdyb3VwKFBhZ2UqIHBhZ2UpCiAgICAgYWRkUGFnZShwYWdlKTsKIH0K
IAorUGFnZUdyb3VwOjp+UGFnZUdyb3VwKCkKK3sKKyAgICByZW1vdmVBbGxVc2VyQ29udGVudCgp
OworfQorCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBQYWdlR3JvdXAqPiBQYWdlR3JvdXBNYXA7
CiBzdGF0aWMgUGFnZUdyb3VwTWFwKiBwYWdlR3JvdXBzID0gMDsKIApAQCAtMTkzLDQgKzE5OCwz
OCBAQCBTdG9yYWdlTmFtZXNwYWNlKiBQYWdlR3JvdXA6OmxvY2FsU3RvcmFnCiB9CiAjZW5kaWYK
IAordm9pZCBQYWdlR3JvdXA6OmFkZFVzZXJTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdHRlcm5zLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB3b3JsZElELCBVc2VyU2NyaXB0SW5qZWN0aW9uVGlt
ZSBpbmplY3Rpb25UaW1lKQoreworICAgIGlmICh3b3JsZElEIDw9IDApCisgICAgICAgIHJldHVy
bjsKKyAgICBPd25QdHI8VXNlclNjcmlwdD4gdXNlclNjcmlwdChuZXcgVXNlclNjcmlwdChzb3Vy
Y2UsIHVybCwgcGF0dGVybnMsIHdvcmxkSUQsIGluamVjdGlvblRpbWUpKTsKKyAgICBpZiAoIW1f
dXNlclNjcmlwdHMpCisgICAgICAgIG1fdXNlclNjcmlwdHMuc2V0KG5ldyBVc2VyU2NyaXB0TWFw
KTsKKyAgICBVc2VyU2NyaXB0VmVjdG9yKiYgc2NyaXB0c0luV29ybGQgPSBtX3VzZXJTY3JpcHRz
LT5hZGQod29ybGRJRCwgMCkuZmlyc3QtPnNlY29uZDsKKyAgICBpZiAoIXNjcmlwdHNJbldvcmxk
KQorICAgICAgICBzY3JpcHRzSW5Xb3JsZCA9IG5ldyBVc2VyU2NyaXB0VmVjdG9yOworICAgIHNj
cmlwdHNJbldvcmxkLT5hcHBlbmQodXNlclNjcmlwdC5yZWxlYXNlKCkpOworfQorCit2b2lkIFBh
Z2VHcm91cDo6cmVtb3ZlVXNlckNvbnRlbnRGb3JXb3JsZChpbnQgd29ybGRJRCkKK3sKKyAgICBp
ZiAoIW1fdXNlclNjcmlwdHMpCisgICAgICAgIHJldHVybjsKKworICAgIFVzZXJTY3JpcHRNYXA6
Oml0ZXJhdG9yIGl0ID0gbV91c2VyU2NyaXB0cy0+ZmluZCh3b3JsZElEKTsKKyAgICBpZiAoaXQt
PnNlY29uZCkgeworICAgICAgICBtX3VzZXJTY3JpcHRzLT5yZW1vdmUoaXQpOworICAgICAgICBk
ZWxldGUgaXQtPnNlY29uZDsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZUdyb3VwOjpyZW1vdmVBbGxV
c2VyQ29udGVudCgpCit7CisgICAgaWYgKG1fdXNlclNjcmlwdHMpIHsKKyAgICAgICAgZGVsZXRl
QWxsVmFsdWVzKCptX3VzZXJTY3JpcHRzKTsKKyAgICAgICAgbV91c2VyU2NyaXB0cy5jbGVhcigp
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdl
L1BhZ2VHcm91cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaAkocmV2
aXNpb24gNDgwMzApCisrKyBXZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
ICJMaW5rSGFzaC5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJVc2VyU2Ny
aXB0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNiArNDIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgcHVibGljOgogICAgICAgICBQYWdlR3JvdXAoY29uc3QgU3RyaW5n
JiBuYW1lKTsKICAgICAgICAgUGFnZUdyb3VwKFBhZ2UqKTsKKyAgICAgICAgflBhZ2VHcm91cCgp
OwogCiAgICAgICAgIHN0YXRpYyBQYWdlR3JvdXAqIHBhZ2VHcm91cChjb25zdCBTdHJpbmcmIGdy
b3VwTmFtZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIGNsb3NlTG9jYWxTdG9yYWdlKCk7CkBAIC02
Nyw2ICs2OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaGFzTG9jYWxT
dG9yYWdlKCkgeyByZXR1cm4gbV9sb2NhbFN0b3JhZ2U7IH0KICNlbmRpZgogCisgICAgICAgIHZv
aWQgYWRkVXNlclNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgS1VSTCYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXR0ZXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCB3b3JsZElELCBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSk7CisgICAgICAgIGNvbnN0IFVzZXJT
Y3JpcHRNYXAqIHVzZXJTY3JpcHRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU2NyaXB0cy5nZXQo
KTsgfQorCisgICAgICAgIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRGb3JXb3JsZChpbnQpOworICAg
ICAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50KCk7CisgICAgICAgIAogICAgIHByaXZhdGU6
CiAgICAgICAgIHZvaWQgYWRkVmlzaXRlZExpbmsoTGlua0hhc2ggc3RyaW5nSGFzaCk7CiAKQEAg
LTgxLDYgKzkwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKICAgICAgICAgUmVmUHRyPFN0b3JhZ2VOYW1lc3BhY2U+IG1fbG9jYWxTdG9yYWdlOwogI2Vu
ZGlmCisKKyAgICAgICAgT3duUHRyPFVzZXJTY3JpcHRNYXA+IG1fdXNlclNjcmlwdHM7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wYWdlL1VzZXJTY3Jp
cHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvVXNlclNjcmlwdC5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wYWdlL1VzZXJTY3JpcHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisgCisjaWZuZGVmIFVzZXJTY3JpcHRfaAorI2RlZmluZSBVc2VyU2NyaXB0
X2gKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFVzZXJTY3JpcHQgeworcHVibGljOgorICAgIFVzZXJTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IEtVUkwmIHVybCwKKyAgICAgICAgICAgICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXR0ZXJucywgaW50IHdvcmxkSUQsCisgICAgICAgICAg
ICAgICBVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lKQorICAgICAgICA6IG1f
c291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3VybCh1cmwpCisgICAgICAgICwgbV9wYXR0ZXJu
cyhwYXR0ZXJucykKKyAgICAgICAgLCBtX3dvcmxkSUQod29ybGRJRCkKKyAgICAgICAgLCBtX2lu
amVjdGlvblRpbWUoaW5qZWN0aW9uVGltZSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgU3Ry
aW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIGNvbnN0IEtVUkwm
IHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhdHRlcm5zKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuczsgfQorICAgIGludCB3b3JsZElE
KCkgY29uc3QgeyByZXR1cm4gbV93b3JsZElEOyB9CisgICAgVXNlclNjcmlwdEluamVjdGlvblRp
bWUgaW5qZWN0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0aW9uVGltZTsgfQorICAg
IAorcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgS1VSTCBtX3VybDsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtX3BhdHRlcm5zOworICAgIGludCBtX3dvcmxkSUQ7CisgICAgVXNlclNj
cmlwdEluamVjdGlvblRpbWUgbV9pbmplY3Rpb25UaW1lOworfTsKKworfSAvLyBuYW1zZXBhY2Ug
V2ViQ29yZQorIAorI2VuZGlmIC8vIFVzZXJTY3JpcHRfaApJbmRleDogV2ViQ29yZS9wYWdlL1Vz
ZXJTY3JpcHRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Vc2VyU2NyaXB0VHlw
ZXMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9Vc2VyU2NyaXB0VHlwZXMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaWZuZGVmIFVzZXJTY3JpcHRU
eXBlc19oCisjZGVmaW5lIFVzZXJTY3JpcHRUeXBlc19oCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitl
bnVtIFVzZXJTY3JpcHRJbmplY3Rpb25UaW1lIHsgSW5qZWN0QXREb2N1bWVudFN0YXJ0LCBJbmpl
Y3RBdERvY3VtZW50RW5kIH07CisKK2NsYXNzIFVzZXJTY3JpcHQ7CisKK3R5cGVkZWYgVmVjdG9y
PE93blB0cjxVc2VyU2NyaXB0PiA+IFVzZXJTY3JpcHRWZWN0b3I7Cit0eXBlZGVmIEhhc2hNYXA8
aW50LCBVc2VyU2NyaXB0VmVjdG9yKj4gVXNlclNjcmlwdE1hcDsKKworfSAvLyBuYW1zZXBhY2Ug
V2ViQ29yZQorIAorI2VuZGlmIC8vIFVzZXJTY3JpcHRUeXBlc19oCkluZGV4OiBXZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24g
NDgwMzcpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIxIEBACisyMDA5LTA5LTAzICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODg5MCwgbWFrZSBzaW1wbGUgdXNlciBzY3JpcHQg
aW5qZWN0aW9uIHdvcmsuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgbmV3IEFQ
SSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyB1c2VyIHNjcmlwdHMgZnJvbSBwYWdlIGdyb3Vwcy4g
IFVzZXIgc2NyaXB0cworICAgICAgICBhcmUgYnVuZGxlZCB0b2dldGhlciBpbiBpc29sYXRlZCB3
b3JsZHMgKHlvdSBjYW4gaGF2ZSBtdWx0aXBsZSBzY3JpcHRzIHRvZ2V0aGVyIGluIHRoZSBzYW1l
CisgICAgICAgIHdvcmxkKS4KKworICAgICAgICBBZGRlZCB1c2Vyc2NyaXB0cy8gZGlyZWN0b3J5
IGZvciBob2xkaW5nIG5ldyB0ZXN0cyAoYWxvbmcgd2l0aCBhIHNpbXBsZSB0ZXN0IG9mIHNjcmlw
dCBpbmplY3Rpb24pLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAo
K1tXZWJWaWV3IF9hZGRVc2VyU2NyaXB0VG9Hcm91cDpzb3VyY2U6dXJsOndvcmxkSUQ6cGF0dGVy
bnM6aW5qZWN0aW9uVGltZTpdKToKKyAgICAgICAgKCtbV2ViVmlldyBfcmVtb3ZlVXNlckNvbnRl
bnRGcm9tR3JvdXA6d29ybGRJRDpdKToKKyAgICAgICAgKCtbV2ViVmlldyBfcmVtb3ZlQWxsVXNl
ckNvbnRlbnRGcm9tR3JvdXA6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3UHJpdmF0ZS5o
OgorCiAyMDA5LTA5LTAzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNp
b24gNDgwMzApCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjEwOCw2ICsyMTA4LDU0IEBAIHN0YXRpYyBpbmxpbmUgSU1QIGdldE1ldGhvZChpZCBv
LCBTRUwgcykKICAgICAgICAgX3ByaXZhdGUtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRB
Y3RpdmUoW1tzZWxmIHdpbmRvd10gaXNLZXlXaW5kb3ddKTsKIH0KIAorKyAodm9pZClfYWRkVXNl
clNjcmlwdFRvR3JvdXA6KE5TU3RyaW5nICopZ3JvdXBOYW1lIHNvdXJjZTooTlNTdHJpbmcgKilz
b3VyY2UgdXJsOihOU1VSTCAqKXVybCB3b3JsZElEOihpbnQpd29ybGRJRCBwYXR0ZXJuczooTlNB
cnJheSAqKXBhdHRlcm5zIGluamVjdGlvblRpbWU6KFdlYlVzZXJTY3JpcHRJbmplY3Rpb25UaW1l
KWluamVjdGlvblRpbWUKK3sKKyAgICBTdHJpbmcgZ3JvdXAoZ3JvdXBOYW1lKTsKKyAgICBpZiAo
Z3JvdXAuaXNFbXB0eSgpIHx8IHdvcmxkSUQgPD0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFBhZ2VHcm91cCogcGFnZUdyb3VwID0gUGFnZUdyb3VwOjpwYWdlR3JvdXAoZ3JvdXApOwor
ICAgIGlmICghcGFnZUdyb3VwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29udmVy
dCB0aGUgcGF0dGVybnMgaW50byBhIFZlY3Rvci4KKyAgICBWZWN0b3I8U3RyaW5nPiBwYXR0ZXJu
c1ZlY3RvcjsKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW3BhdHRlcm5zIGNvdW50XTsKKyAgICBm
b3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlkIGVudHJ5
ID0gW3BhdHRlcm5zIG9iamVjdEF0SW5kZXg6IGldOworICAgICAgICBpZiAoW2VudHJ5IGlzS2lu
ZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgICAgICBwYXR0ZXJuc1ZlY3Rvci5h
cHBlbmQoU3RyaW5nKChOU1N0cmluZyopZW50cnkpKTsKKyAgICB9CisgICAgCisgICAgcGFnZUdy
b3VwLT5hZGRVc2VyU2NyaXB0KHNvdXJjZSwgdXJsLCBwYXR0ZXJuc1ZlY3Rvciwgd29ybGRJRCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluamVjdGlvblRpbWUgPT0gV2ViSW5qZWN0
QXREb2N1bWVudFN0YXJ0ID8gSW5qZWN0QXREb2N1bWVudFN0YXJ0IDogSW5qZWN0QXREb2N1bWVu
dEVuZCk7Cit9CisKKysgKHZvaWQpX3JlbW92ZVVzZXJDb250ZW50RnJvbUdyb3VwOihOU1N0cmlu
ZyAqKWdyb3VwTmFtZSB3b3JsZElEOihpbnQpd29ybGRJRAoreworICAgIFN0cmluZyBncm91cChn
cm91cE5hbWUpOworICAgIGlmIChncm91cC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBQYWdlR3JvdXAqIHBhZ2VHcm91cCA9IFBhZ2VHcm91cDo6cGFnZUdyb3VwKGdyb3Vw
KTsKKyAgICBpZiAoIXBhZ2VHcm91cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGFnZUdyb3Vw
LT5yZW1vdmVVc2VyQ29udGVudEZvcldvcmxkKHdvcmxkSUQpOworfQorCisrICh2b2lkKV9yZW1v
dmVBbGxVc2VyQ29udGVudEZyb21Hcm91cDooTlNTdHJpbmcgKilncm91cE5hbWUKK3sKKyAgICBT
dHJpbmcgZ3JvdXAoZ3JvdXBOYW1lKTsKKyAgICBpZiAoZ3JvdXAuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgUGFnZUdyb3VwKiBwYWdlR3JvdXAgPSBQYWdlR3JvdXA6OnBh
Z2VHcm91cChncm91cCk7CisgICAgaWYgKCFwYWdlR3JvdXApCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBwYWdlR3JvdXAtPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7Cit9CiBAZW5kCiAKIEBp
bXBsZW1lbnRhdGlvbiBfV2ViU2FmZUZvcndhcmRlcgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDExIEBAIHR5cGVkZWYgZW51
bSB7CiB9IFdlYkRhc2hib2FyZEJlaGF2aW9yOwogI2VuZGlmCiAKK3R5cGVkZWYgZW51bSB7Cisg
ICAgV2ViSW5qZWN0QXREb2N1bWVudFN0YXJ0LAorICAgIFdlYkluamVjdEF0RG9jdW1lbnRFbmQs
Cit9IFdlYlVzZXJTY3JpcHRJbmplY3Rpb25UaW1lOworCiBAaW50ZXJmYWNlIFdlYkNvbnRyb2xs
ZXIgOiBOU1RyZWVDb250cm9sbGVyIHsKICAgICBJQk91dGxldCBXZWJWaWV3ICp3ZWJWaWV3Owog
fQpAQCAtNDUyLDYgKzQ1NywxMCBAQCBDb3VsZCBiZSB3b3J0aCBhZGRpbmcgdG8gdGhlIEFQSS4K
IC8vIFJlbW92ZXMgYWxsIHdoaXRlIGxpc3QgZW50cmllcyBjcmVhdGVkIHdpdGggX3doaXRlTGlz
dEFjY2Vzc0Zyb21PcmlnaW4uCiArICh2b2lkKV9yZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHM7
CiAKKysgKHZvaWQpX2FkZFVzZXJTY3JpcHRUb0dyb3VwOihOU1N0cmluZyAqKWdyb3VwTmFtZSBz
b3VyY2U6KE5TU3RyaW5nICopc291cmNlIHVybDooTlNVUkwgKil1cmwgd29ybGRJRDooaW50KXdv
cmxkSUQgcGF0dGVybnM6KE5TQXJyYXkgKilwYXR0ZXJucyBpbmplY3Rpb25UaW1lOihXZWJVc2Vy
U2NyaXB0SW5qZWN0aW9uVGltZSlpbmplY3Rpb25UaW1lOworKyAodm9pZClfcmVtb3ZlVXNlckNv
bnRlbnRGcm9tR3JvdXA6KE5TU3RyaW5nICopZ3JvdXBOYW1lIHdvcmxkSUQ6KGludCl3b3JsZElE
OworKyAodm9pZClfcmVtb3ZlQWxsVXNlckNvbnRlbnRGcm9tR3JvdXA6KE5TU3RyaW5nICopZ3Jv
dXBOYW1lOworCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld1ByaW50aW5nUHJp
dmF0ZSkKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MDUs
NiArOTA1LDIwIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHdoaXRlTGlzdEFjY2Vzc0Zyb21PcmkKICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1Zh
bHVlUmVmIGFkZFVzZXJTY3JpcHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
aWYgKGFyZ3VtZW50Q291bnQgIT0gMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworICAgIAorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzb3VyY2Uo
QWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGJvb2wgcnVuQXRTdGFydCA9IEpT
VmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzFdKTsKKyAgICAKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5h
ZGRVc2VyU2NyaXB0KHNvdXJjZS5nZXQoKSwgcnVuQXRTdGFydCk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorIAogLy8gU3RhdGljIFZhbHVlcwogCiBzdGF0
aWMgSlNWYWx1ZVJlZiBnZXRHbG9iYWxGbGFnQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQpAQCAtOTgxLDYgKzk5NSw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExh
eW91dFRlc3RDb250cm9sbGVyOjoKIHsKICAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0
aWNGdW5jdGlvbnNbXSA9IHsKICAgICAgICAgeyAiYWRkRGlzYWxsb3dlZFVSTCIsIGFkZERpc2Fs
bG93ZWRVUkxDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJhZGRVc2VyU2NyaXB0IiwgYWRk
VXNlclNjcmlwdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImNsZWFyQWxsRGF0YWJhc2Vz
IiwgY2xlYXJBbGxEYXRhYmFzZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJjbGVhckJh
Y2tGb3J3YXJkTGlzdCIsIGNsZWFyQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiY2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQiLCBjbGVhclBlcnNpc3RlbnRV
c2VyU3R5bGVTaGVldENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDQ4MDMwKQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2hpdGVM
aXN0QWNjZXNzRnJvbU9yaWdpbihKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVm
IGRlc3RpbmF0aW9uUHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBh
bGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiAKKyAgICB2b2lkIGFkZFVzZXJTY3JpcHQoSlNT
dHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQpOworCiBwcml2YXRlOgogICAgIGJvb2wg
bV9kdW1wQXNUZXh0OwogICAgIGJvb2wgbV9kdW1wQXNQREY7CkluZGV4OiBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0
ay5jcHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDMgKzQ0
OCwxMiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlCiAgICAgZ19m
cmVlKG5hbWUpOwogICAgIGdfZnJlZShzdHJWYWx1ZSk7CiB9Cis8PDw8PDw8IC5taW5lCisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNl
LCBib29sIHJ1bkF0U3RhcnQpCit7CisgICAgcHJpbnRmKCJMYXlvdXRUZXN0Q29udHJvbGxlcjo6
YWRkVXNlclNjcmlwdCBub3QgaW1wbGVtZW50ZWQuXG4iKTsKK30KKworPT09PT09PQorPj4+Pj4+
PiAucjQ4MDMwCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiA0ODAzMCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA3OCw2ICsx
MDc4LDcgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdAogICAgIFt3
ZWJWaWV3IF9zZXREYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvclVzZUJhY2t3
YXJkQ29tcGF0aWJpbGl0eU1vZGUgdG86Tk9dOwogICAgIFt3ZWJWaWV3IF9jbGVhck1haW5GcmFt
ZU5hbWVdOwogICAgIFtbd2ViVmlldyB1bmRvTWFuYWdlcl0gcmVtb3ZlQWxsQWN0aW9uc107Cisg
ICAgW1dlYlZpZXcgX3JlbW92ZUFsbFVzZXJDb250ZW50RnJvbUdyb3VwOlt3ZWJWaWV3IGdyb3Vw
TmFtZV1dOwogCiAgICAgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpOwogCkluZGV4
OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA0ODAzMCkKKysrIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDY0LDMgKzQ2NCwxMCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3aGl0ZUxpc3RB
Y2NlCiAgICAgTlNTdHJpbmcgKmRlc3RpbmF0aW9uSG9zdE5TID0gKE5TU3RyaW5nICopaG9zdENG
LmdldCgpOwogICAgIFtXZWJWaWV3IF93aGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luOnNvdXJjZU9y
aWdpbk5TIGRlc3RpbmF0aW9uUHJvdG9jb2w6ZGVzdGluYXRpb25Qcm90b2NvbE5TIGRlc3RpbmF0
aW9uSG9zdDpkZXN0aW5hdGlvbkhvc3ROUyBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWluczphbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWluc107CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQpCit7Cisg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzb3VyY2VDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzb3VyY2UpKTsKKyAgICBOU1N0cmluZyAqc291
cmNlTlMgPSAoTlNTdHJpbmcgKilzb3VyY2VDRi5nZXQoKTsKKyAgICBbV2ViVmlldyBfYWRkVXNl
clNjcmlwdFRvR3JvdXA6QCJvcmcud2Via2l0LkR1bXBSZW5kZXJUcmVlIiBzb3VyY2U6c291cmNl
TlMgdXJsOm5pbCB3b3JsZElEOjEgcGF0dGVybnM6bmlsIGluamVjdGlvblRpbWU6KHJ1bkF0U3Rh
cnQgPyBXZWJJbmplY3RBdERvY3VtZW50U3RhcnQgOiBXZWJJbmplY3RBdERvY3VtZW50RW5kKV07
Cit9CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDQ4MDMwKQorKysgV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMxLDMgKzgzMSw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndoaXRlTGlzdEFjY2UKIHsKICAgICBwcmludGYoIkxheW91dFRlc3RDb250cm9sbGVyOjp3aGl0
ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luIG5vdCBpbXBsZW1lbnRlZFxuIik7CiB9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29s
IHJ1bkF0U3RhcnQpCit7CisgICAgcHJpbnRmKCJMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNl
clNjcmlwdCBub3QgaW1wbGVtZW50ZWQuXG4iKTsKK30KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCShy
ZXZpc2lvbiA0ODAzMCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRl
c3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsMyArMjc3LDcgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZQogICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0
cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCkKK3sKKyAgICBwcmludGYoIkxheW91dFRl
c3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOworfQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNDgwMzcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOS0wOS0wMyAgRGF2ZSBIeWF0dCAgPGh5YXR0QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg4OTAsIG1ha2Ugc2lt
cGxlIHVzZXIgc2NyaXB0IGluamVjdGlvbiB3b3JrLgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIG5ldyBBUEkgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgdXNlciBzY3JpcHRzIGZy
b20gcGFnZSBncm91cHMuICBVc2VyIHNjcmlwdHMKKyAgICAgICAgYXJlIGJ1bmRsZWQgdG9nZXRo
ZXIgaW4gaXNvbGF0ZWQgd29ybGRzICh5b3UgY2FuIGhhdmUgbXVsdGlwbGUgc2NyaXB0cyB0b2dl
dGhlciBpbiB0aGUgc2FtZQorICAgICAgICB3b3JsZCkuCisKKyAgICAgICAgQWRkZWQgdXNlcnNj
cmlwdHMvIGRpcmVjdG9yeSBmb3IgaG9sZGluZyBuZXcgdGVzdHMgKGFsb25nIHdpdGggYSBzaW1w
bGUgdGVzdCBvZiBzY3JpcHQgaW5qZWN0aW9uKS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy91
c2Vyc2NyaXB0czogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL3VzZXJzY3JpcHRzL3Nj
cmlwdC1ydW4tYXQtZW5kLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogdXNlcnNjcmlw
dHM6IEFkZGVkLgorICAgICAgICAqIHVzZXJzY3JpcHRzL3NjcmlwdC1ydW4tYXQtZW5kLmh0bWw6
IEFkZGVkLgorCiAyMDA5LTA5LTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL3VzZXJzY3JpcHRzL3NjcmlwdC1ydW4tYXQtZW5kLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvdXNlcnNjcmlwdHMvc2NyaXB0
LXJ1bi1hdC1lbmQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL3VzZXJzY3JpcHRzL3NjcmlwdC1ydW4tYXQtZW5kLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSBAQAorUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvdXNlcnNjcmlw
dHMvc2NyaXB0LXJ1bi1hdC1lbmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy91c2Vy
c2NyaXB0cy9zY3JpcHQtcnVuLWF0LWVuZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvdXNlcnNjcmlwdHMvc2NyaXB0LXJ1bi1hdC1lbmQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuYWRkVXNlclNjcmlwdCgi
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpLmlubmVySFRNTCA9ICdQQVNTJyIsIGZh
bHNlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJ0YXJnZXQiPkZB
SUw8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="20043"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>