<?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>21051</bug_id>
          
          <creation_ts>2008-09-24 02:03:48 -0700</creation_ts>
          <short_desc>Databases panel should turn into a general Storage panel</short_desc>
          <delta_ts>2009-02-09 01:23:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>keishi</cc>
    
    <cc>kmccullough</cc>
    
    <cc>mike</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92491</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-09-24 02:03:48 -0700</bug_when>
    <thetext>The Databases panel should turn into a general storage panel and include Local and Session storage as well as Cookies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93123</commentid>
    <comment_count>1</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-09-27 23:30:34 -0700</bug_when>
    <thetext>*** Bug 19882 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103715</commentid>
    <comment_count>2</comment_count>
      <attachid>26293</attachid>
    <who name="Yael">yael</who>
    <bug_when>2008-12-29 11:43:48 -0800</bug_when>
    <thetext>Created attachment 26293
Add localStorage and sessionStorage to databases panel.

Add localStorage and sessionStorage to databases panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103744</commentid>
    <comment_count>3</comment_count>
      <attachid>26293</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2008-12-29 16:18:26 -0800</bug_when>
    <thetext>Comment on attachment 26293
Add localStorage and sessionStorage to databases panel.

Great to see someone tackling this!  I&apos;m not going through all of the html/js at this time, but have a few comments.  One conceptual, and one nit-picky.

&gt; Index: WebCore/storage/SessionStorage.h
&gt; ===================================================================
&gt; --- WebCore/storage/SessionStorage.h	(revision 39498)
&gt; +++ WebCore/storage/SessionStorage.h	(working copy)
&gt; @@ -42,7 +42,7 @@
&gt;          static PassRefPtr&lt;SessionStorage&gt; create(Page*);
&gt;          PassRefPtr&lt;SessionStorage&gt; copy(Page*);
&gt;          
&gt; -        PassRefPtr&lt;StorageArea&gt; storageArea(SecurityOrigin*);
&gt; +        PassRefPtr&lt;StorageArea&gt; storageArea(Frame*, SecurityOrigin*);

I&apos;m admittedly not reading through the entire patch to determine this myself, but is having the Frame necessary for the inspector&apos;s sake?  If we&apos;re modeling closely after the inspector&apos;s interaction with Database storage, it seems the frame argument isn&apos;t necessary.

LocalStorage::storageArea() takes the frame argument for the sake of a future client call since saving stuff to the users disk is a policy concern.  SessionStorage has no such concern, and I&apos;d rather not see it cluttered like this without need.


&gt; Index: WebCore/storage/SessionStorage.cpp
&gt; ===================================================================
&gt; --- WebCore/storage/SessionStorage.cpp	(revision 39498)
&gt; +++ WebCore/storage/SessionStorage.cpp	(working copy)
&gt;  
&gt; -PassRefPtr&lt;StorageArea&gt; SessionStorage::storageArea(SecurityOrigin* origin)
&gt; +PassRefPtr&lt;StorageArea&gt; SessionStorage::storageArea(Frame* sourceFrame, SecurityOrigin* origin)
&gt;  {
&gt; +    const String domain = origin-&gt;domain();
&gt;      RefPtr&lt;SessionStorageArea&gt; storageArea;
&gt; -    if (storageArea = m_storageAreaMap.get(origin))
&gt; +    if (storageArea = m_storageAreaMap.get(origin)) {
&gt; +        sourceFrame-&gt;page()-&gt;inspectorController()-&gt;didUseDomStorage(storageArea.get(), domain, false, sourceFrame);
&gt;          return storageArea.release();
&gt; +    }
&gt;          
&gt;      storageArea = SessionStorageArea::create(origin, m_page);
&gt; +    sourceFrame-&gt;page()-&gt;inspectorController()-&gt;didUseDomStorage(storageArea.get(), domain, false, sourceFrame);
&gt;      m_storageAreaMap.set(origin, storageArea);
&gt;      return storageArea.release();
&gt;  }

The local copy of origin-&gt;domain() seems unnecessary here, not gaining anything by reusing it.  May as well just call the method in the two places it&apos;s needed.

&gt; Index: WebCore/storage/LocalStorage.cpp
&gt; ===================================================================
&gt; --- WebCore/storage/LocalStorage.cpp	(revision 39498)
&gt; +++ WebCore/storage/LocalStorage.cpp	(working copy)
&gt; -
&gt; +    const String domain = origin-&gt;domain();
&gt;      RefPtr&lt;LocalStorageArea&gt; storageArea;
&gt; -    if (storageArea = m_storageAreaMap.get(origin))
&gt; +    if (storageArea = m_storageAreaMap.get(origin)) {
&gt; +        sourceFrame-&gt;page()-&gt;inspectorController()-&gt;didUseDomStorage(storageArea.get(), domain, true, sourceFrame);
&gt;          return storageArea.release();
&gt; +    }
&gt;          
&gt;      storageArea = LocalStorageArea::create(origin, this);
&gt; +    sourceFrame-&gt;page()-&gt;inspectorController()-&gt;didUseDomStorage(storageArea.get(), domain, true, sourceFrame);
&gt;      m_storageAreaMap.set(origin, storageArea);
&gt;      return storageArea.release();
&gt;  }

Same comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103803</commentid>
    <comment_count>4</comment_count>
      <attachid>26312</attachid>
    <who name="Yael">yael</who>
    <bug_when>2008-12-30 10:45:49 -0800</bug_when>
    <thetext>Created attachment 26312
This patch is addressing comment #2.

This patch is addressing comment #2 by moving the call to InspectorController from sessionStorage and localStorage to DomWindow,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103810</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-12-30 11:21:33 -0800</bug_when>
    <thetext>Just a small nit, we prefer the spelling DOM to Dom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104711</commentid>
    <comment_count>6</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-01-07 05:37:55 -0800</bug_when>
    <thetext>My patch below was of course related to comment #3, not comment #2,
Brady, others, do you have some time to review the rest of the patch? thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108148</commentid>
    <comment_count>7</comment_count>
      <attachid>26312</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-02-03 13:18:00 -0800</bug_when>
    <thetext>Comment on attachment 26312
This patch is addressing comment #2.

This patch is looking great! Sorry it took so long to get a review. Marking as r- for now to get some things fixed based on the comments below.

&gt; +    page-&gt;inspectorController()-&gt;didUseDomStorage(storageArea.get(), false, m_frame);

As Sam mentioned, we prefer the spelling DOM to Dom when in the middle of name, or dom if it is at the beginning. There are a lot of occurrences of this that should be changed to DOM.

&gt; +    this.localStorageListTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString(&quot;LOCAL-STORAGE&quot;), {}, true);
&gt; +    this.sessionStorageListTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString(&quot;SESSION-STORAGE&quot;), {}, true);

I think these would read better without the hyphen, so &quot;LOCAL STORAGE&quot; and &quot;SESSION STORAGE&quot;.

&gt; +    content: url(Images/domStorage.png);

What does this icon look like? Who created it? Can it be freely added to WebKit under the BSD license?

&gt; -.database-view {
&gt; +.database-view, .domstorage-view {

I think it might be better to rename .database-view to something generic like .storage-view, so all the selectors don&apos;t need to be complex multi-selectors.

You also need to add the new files to the WebCore.vcproj.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108306</commentid>
    <comment_count>8</comment_count>
      <attachid>27321</attachid>
    <who name="Yael">yael</who>
    <bug_when>2009-02-04 11:24:18 -0800</bug_when>
    <thetext>Created attachment 27321
Addressing comment #7

This patch is addressing comment #7. 
WRT the image, I drew it based on databasetable.png. Nobody should claim ownership for it and it should be safe to add the image to the project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108307</commentid>
    <comment_count>9</comment_count>
      <attachid>27322</attachid>
    <who name="Yael">yael</who>
    <bug_when>2009-02-04 11:25:25 -0800</bug_when>
    <thetext>Created attachment 27322
The new image</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108438</commentid>
    <comment_count>10</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2009-02-05 07:54:25 -0800</bug_when>
    <thetext>Thank you for approving this patch. It was real fun working on the Web Inspector :-)

Now I need help committing this patch :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108863</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-02-07 21:22:00 -0800</bug_when>
    <thetext>Committed in http://trac.webkit.org/changeset/40768.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26293</attachid>
            <date>2008-12-29 11:43:48 -0800</date>
            <delta_ts>2008-12-30 10:45:49 -0800</delta_ts>
            <desc>Add localStorage and sessionStorage to databases panel.</desc>
            <filename>inspector.patch</filename>
            <type>text/plain</type>
            <size>34463</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCShyZXZpc2lvbiAzOTQ5OCkKKysrIFdlYkNv
cmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBACiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBjcmVhdGUoUGFn
ZSopOwogICAgICAgICBQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPiBjb3B5KFBhZ2UqKTsKICAg
ICAgICAgCi0gICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhKFNlY3Vy
aXR5T3JpZ2luKik7CisgICAgICAgIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVh
KEZyYW1lKiwgU2VjdXJpdHlPcmlnaW4qKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgUGFn
ZSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZTsgfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1Nlc3Np
b25TdG9yYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU2Vzc2lvblN0b3Jh
Z2UuY3BwCShyZXZpc2lvbiAzOTQ5OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TZXNzaW9uU3RvcmFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKQEAgLTYxLDEzICs2
MiwxNyBAQAogICAgIHJldHVybiBuZXdTZXNzaW9uLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxTdG9yYWdlQXJlYT4gU2Vzc2lvblN0b3JhZ2U6OnN0b3JhZ2VBcmVhKFNlY3VyaXR5T3JpZ2lu
KiBvcmlnaW4pCitQYXNzUmVmUHRyPFN0b3JhZ2VBcmVhPiBTZXNzaW9uU3RvcmFnZTo6c3RvcmFn
ZUFyZWEoRnJhbWUqIHNvdXJjZUZyYW1lLCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogeworICAg
IGNvbnN0IFN0cmluZyBkb21haW4gPSBvcmlnaW4tPmRvbWFpbigpOwogICAgIFJlZlB0cjxTZXNz
aW9uU3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhOwotICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3Rv
cmFnZUFyZWFNYXAuZ2V0KG9yaWdpbikpCisgICAgaWYgKHN0b3JhZ2VBcmVhID0gbV9zdG9yYWdl
QXJlYU1hcC5nZXQob3JpZ2luKSkgeworICAgICAgICBzb3VyY2VGcmFtZS0+cGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURvbVN0b3JhZ2Uoc3RvcmFnZUFyZWEuZ2V0KCksIGRv
bWFpbiwgZmFsc2UsIHNvdXJjZUZyYW1lKTsKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJl
bGVhc2UoKTsKKyAgICB9CiAgICAgICAgIAogICAgIHN0b3JhZ2VBcmVhID0gU2Vzc2lvblN0b3Jh
Z2VBcmVhOjpjcmVhdGUob3JpZ2luLCBtX3BhZ2UpOworICAgIHNvdXJjZUZyYW1lLT5wYWdlKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlkVXNlRG9tU3RvcmFnZShzdG9yYWdlQXJlYS5nZXQo
KSwgZG9tYWluLCBmYWxzZSwgc291cmNlRnJhbWUpOwogICAgIG1fc3RvcmFnZUFyZWFNYXAuc2V0
KG9yaWdpbiwgc3RvcmFnZUFyZWEpOwogICAgIHJldHVybiBzdG9yYWdlQXJlYS5yZWxlYXNlKCk7
CiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkocmV2aXNpb24gMzk0OTgpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJMb2NhbFN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhZ2VHcm91cC5oIgpAQCAtOTMsMTIgKzk0LDE1IEBACiAKICAgICAvLyBGSVhNRTogSWYgdGhl
IHN0b3JhZ2UgYXJlYSBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUgaGVy
ZSwgd2UgbmVlZCB0byAKICAgICAvLyBzeW5jIGl0cyBleGlzdGFuY2UgYW5kIHF1b3RhIG91dCB0
byBkaXNrIHZpYSBhbiB0YXNrIG9mIHR5cGUgQXJlYVN5bmMKLQorICAgIGNvbnN0IFN0cmluZyBk
b21haW4gPSBvcmlnaW4tPmRvbWFpbigpOwogICAgIFJlZlB0cjxMb2NhbFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYTsKLSAgICBpZiAoc3RvcmFnZUFyZWEgPSBtX3N0b3JhZ2VBcmVhTWFwLmdldChv
cmlnaW4pKQorICAgIGlmIChzdG9yYWdlQXJlYSA9IG1fc3RvcmFnZUFyZWFNYXAuZ2V0KG9yaWdp
bikpIHsKKyAgICAgICAgc291cmNlRnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5kaWRVc2VEb21TdG9yYWdlKHN0b3JhZ2VBcmVhLmdldCgpLCBkb21haW4sIHRydWUsIHNvdXJj
ZUZyYW1lKTsKICAgICAgICAgcmV0dXJuIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKTsKKyAgICB9CiAg
ICAgICAgIAogICAgIHN0b3JhZ2VBcmVhID0gTG9jYWxTdG9yYWdlQXJlYTo6Y3JlYXRlKG9yaWdp
biwgdGhpcyk7CisgICAgc291cmNlRnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5kaWRVc2VEb21TdG9yYWdlKHN0b3JhZ2VBcmVhLmdldCgpLCBkb21haW4sIHRydWUsIHNvdXJj
ZUZyYW1lKTsKICAgICBtX3N0b3JhZ2VBcmVhTWFwLnNldChvcmlnaW4sIHN0b3JhZ2VBcmVhKTsK
ICAgICByZXR1cm4gc3RvcmFnZUFyZWEucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM5NDk5KQor
KysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NCBAQAorMjAw
OC0xMi0yOSAgWWFlbCBBaGFyb24gIDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydGlhbCBmaXggZm9yIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNTE+CisgICAgICAgIElu
Y2x1ZGUgbG9jYWxTdG9yYWdlIGFuZCBzZXNzaW9uU3RvcmFnZSBpbiBEYXRhYmFzZXNQYW5lbC4K
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRvbVN0b3JhZ2VSZXNvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRvbVN0b3JhZ2VSZXNvdXJjZTo6c2V0U2NyaXB0T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRvbVN0b3JhZ2VSZXNvdXJjZTo6SW5zcGVjdG9y
RG9tU3RvcmFnZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjphZGREb21TdG9yYWdlU2NyaXB0UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlRG9tU3RvcmFnZVNjcmlwdFJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFVzZURvbVN0b3Jh
Z2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZXNQYW5lbC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EYXRhYmFzZXNQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2Vz
UGFuZWwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZXNQ
YW5lbC5wcm90b3R5cGUuYWRkRGF0YWJhc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFi
YXNlc1BhbmVsLnByb3RvdHlwZS5hZGREb21TdG9yYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuc2hvd0RhdGFiYXNlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuc2hvd0RvbVN0b3JhZ2UpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlc1BhbmVsLnByb3RvdHlwZS5jbG9zZVZpc2libGVWaWV3
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUudXBkYXRl
RGF0YWJhc2VUYWJsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRhdGFiYXNlc1BhbmVsLnBy
b3RvdHlwZS5kYXRhR3JpZEZvckRvbVN0b3JhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRh
dGFiYXNlc1BhbmVsLnByb3RvdHlwZS5fdXBkYXRlU2lkZWJhcldpZHRoKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Eb21TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Eb21TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZS5vbnNlbGVjdCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVudC5wcm90
b3R5cGUuZ2V0IG1haW5UaXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZVNp
ZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IG1haW5UaXRsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRG9tU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHN1YnRp
dGxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50
LnByb3RvdHlwZS5zZXQgc3VidGl0bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
RG9tU3RvcmFnZS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZS5wcm90b3R5cGUuZ2V0IGRvbVN0b3Jh
Z2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2UucHJvdG90eXBlLnNldCBkb21T
dG9yYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21TdG9yYWdlLnByb3RvdHlwZS5nZXQg
ZG9tYWluKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21TdG9yYWdlLnByb3RvdHlwZS5zZXQg
ZG9tYWluKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21TdG9yYWdlLnByb3RvdHlwZS5nZXQg
aXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2UucHJvdG90
eXBlLnNldCBpc0xvY2FsU3RvcmFnZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9E
b21TdG9yYWdlSXRlbXNWaWV3LmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21T
dG9yYWdlSXRlbXNWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21TdG9yYWdlSXRlbXNW
aWV3LnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21TdG9yYWdlSXRl
bXNWaWV3LnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL2RvbVN0b3JhZ2UucG5nOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
Y3NzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuYWRkRG9tU3RvcmFnZSk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpzZXNzaW9uU3RvcmFnZSk6CisgICAgICAgICogc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxTdG9yYWdlOjpz
dG9yYWdlQXJlYSk6CisgICAgICAgICogc3RvcmFnZS9TZXNzaW9uU3RvcmFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZXNzaW9uU3RvcmFnZTo6c3RvcmFnZUFyZWEpOgorICAgICAgICAqIHN0
b3JhZ2UvU2Vzc2lvblN0b3JhZ2UuaDoKKwogMjAwOC0xMi0yOCAgQ2FtZXJvbiBad2FyaWNoICA8
Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vpbmln
LgpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDM5NDk4KQorKysgV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQAogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYSA9IHBhZ2UtPnNlc3Npb25TdG9yYWdlKCktPnN0b3JhZ2VBcmVhKGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVh
ID0gcGFnZS0+c2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEobV9mcmFtZSwgZG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCkpOwogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVh
dGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVsZWFzZSgpKTsKICAgICByZXR1cm4gbV9zZXNzaW9u
U3RvcmFnZS5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgJKHJldmlzaW9uIDM5NDk4KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiBjbGFzcyBIaXRUZXN0
UmVzdWx0OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogY2xhc3MgSmF2YVNjcmlwdENhbGxGcmFt
ZTsKK2NsYXNzIFN0b3JhZ2VBcmVhOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBS
ZXNvdXJjZVJlc3BvbnNlOwpAQCAtNjYsNiArNjcsNyBAQAogCiBzdHJ1Y3QgQ29uc29sZU1lc3Nh
Z2U7CiBzdHJ1Y3QgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKK3N0cnVjdCBJbnNwZWN0b3JE
b21TdG9yYWdlUmVzb3VyY2U7CiBzdHJ1Y3QgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7CiAKQEAgLTc4LDYgKzgwLDcgQEAKICAgICB0eXBlZGVmIEhhc2hNYXA8bG9u
ZyBsb25nLCBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+ID4gUmVzb3VyY2VzTWFwOwogICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8RnJhbWU+LCBSZXNvdXJjZXNNYXAqPiBGcmFtZVJlc291cmNl
c01hcDsKICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNTZXQ7CisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxJ
bnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2U+ID4gRG9tU3RvcmFnZVJlc291cmNlc1NldDsKIAog
ICAgIHR5cGVkZWYgZW51bSB7CiAgICAgICAgIEN1cnJlbnRQYW5lbCwKQEAgLTIwOSw2ICsyMTIs
OSBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICB2b2lkIGRpZE9wZW5EYXRhYmFzZShEYXRh
YmFzZSosIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbik7CiAjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgdm9p
ZCBkaWRVc2VEb21TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgY29uc3QgU3RyaW5n
JiBkb21haW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSk7CisjZW5kaWYKIAog
ICAgIGNvbnN0IFJlc291cmNlc01hcCYgcmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
dXJjZXM7IH0KIApAQCAtMjczLDYgKzI3OSwxMCBAQAogICAgIEpTT2JqZWN0UmVmIGFkZERhdGFi
YXNlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZSopOwogICAgIHZvaWQg
cmVtb3ZlRGF0YWJhc2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKik7
CiAjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgSlNPYmplY3RSZWYgYWRkRG9t
U3RvcmFnZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRvbVN0b3JhZ2VSZXNvdXJjZSopOworICAg
IHZvaWQgcmVtb3ZlRG9tU3RvcmFnZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRvbVN0b3JhZ2VS
ZXNvdXJjZSopOworI2VuZGlmCiAKICAgICBKU1ZhbHVlUmVmIGNhbGxTaW1wbGVGdW5jdGlvbihK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSkgY29uc3Q7CiAgICAgSlNWYWx1ZVJlZiBjYWxsRnVuY3Rpb24oSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmJiBl
eGNlcHRpb24pIGNvbnN0OwpAQCAtMzAyLDYgKzMxMiw5IEBACiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogICAgIERhdGFiYXNlUmVzb3VyY2VzU2V0IG1fZGF0YWJhc2VSZXNvdXJjZXM7CiAjZW5kaWYK
KyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgRG9tU3RvcmFnZVJlc291cmNlc1NldCBtX2Rv
bVN0b3JhZ2VSZXNvdXJjZXM7CisjZW5kaWYKICAgICBKU09iamVjdFJlZiBtX3NjcmlwdE9iamVj
dDsKICAgICBKU09iamVjdFJlZiBtX2NvbnRyb2xsZXJTY3JpcHRPYmplY3Q7CiAgICAgSlNDb250
ZXh0UmVmIG1fc2NyaXB0Q29udGV4dDsKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzOTQ5OCkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4MiwxMiBAQAog
I2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorI2luY2x1ZGUgIlN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgorI2luY2x1
ZGUgIkpTU3RvcmFnZS5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICNpbmNsdWRlICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlw
dERlYnVnU2VydmVyLmgiCkBAIC00NDUsNiArNDUxLDQ2IEBACiB9OwogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCitzdHJ1Y3QgSW5zcGVjdG9yRG9tU3RvcmFnZVJlc291cmNlIDog
cHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRG9tU3RvcmFnZVJlc291cmNlPiB7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRG9tU3RvcmFnZVJlc291cmNlPiBjcmVhdGUoU3RvcmFn
ZSogZG9tU3RvcmFnZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2Us
IEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVj
dG9yRG9tU3RvcmFnZVJlc291cmNlKGRvbVN0b3JhZ2UsIGRvbWFpbiwgaXNMb2NhbFN0b3JhZ2Us
IGZyYW1lKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRTY3JpcHRPYmplY3QoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIG5ld1NjcmlwdE9iamVjdCkKKyAgICB7CisgICAgICAgIGlm
IChzY3JpcHRDb250ZXh0ICYmIHNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgIEpTVmFsdWVVbnBy
b3RlY3Qoc2NyaXB0Q29udGV4dCwgc2NyaXB0T2JqZWN0KTsKKworICAgICAgICBzY3JpcHRPYmpl
Y3QgPSBuZXdTY3JpcHRPYmplY3Q7CisgICAgICAgIHNjcmlwdENvbnRleHQgPSBjb250ZXh0Owor
CisgICAgICAgIEFTU0VSVCgoY29udGV4dCAmJiBuZXdTY3JpcHRPYmplY3QpIHx8ICghY29udGV4
dCAmJiAhbmV3U2NyaXB0T2JqZWN0KSk7CisgICAgICAgIGlmIChjb250ZXh0ICYmIG5ld1Njcmlw
dE9iamVjdCkKKyAgICAgICAgICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIG5ld1NjcmlwdE9i
amVjdCk7CisgICAgfQorCisgICAgUmVmUHRyPFN0b3JhZ2U+IGRvbVN0b3JhZ2U7CisgICAgU3Ry
aW5nIGRvbWFpbjsKKyAgICBib29sIGlzTG9jYWxTdG9yYWdlOworICAgIFJlZlB0cjxGcmFtZT4g
ZnJhbWU7CisgICAgSlNDb250ZXh0UmVmIHNjcmlwdENvbnRleHQ7CisgICAgSlNPYmplY3RSZWYg
c2NyaXB0T2JqZWN0OworICAgIAorcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JEb21TdG9yYWdlUmVz
b3VyY2UoU3RvcmFnZSogZG9tU3RvcmFnZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGJvb2wgaXNM
b2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKKyAgICAgICAgOiBkb21TdG9yYWdlKGRvbVN0b3Jh
Z2UpCisgICAgICAgICwgZG9tYWluKGRvbWFpbikKKyAgICAgICAgLCBpc0xvY2FsU3RvcmFnZShp
c0xvY2FsU3RvcmFnZSkKKyAgICAgICAgLCBmcmFtZShmcmFtZSkKKyAgICAgICAgLCBzY3JpcHRD
b250ZXh0KDApCisgICAgICAgICwgc2NyaXB0T2JqZWN0KDApCisgICAgeworICAgIH0KK307Cisj
ZW5kaWYKKwogLy8gSmF2YVNjcmlwdCBDYWxsYmFja3MKIAogI2RlZmluZSBTSU1QTEVfSU5TUEVD
VE9SX0NBTExCQUNLKGpzRnVuY3Rpb24sIGluc3BlY3RvckNvbnRyb2xsZXJNZXRob2QpIFwKQEAg
LTIwOTgsNiArMjE0NCwxMSBAQAogICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNTZXQ6Oml0ZXJh
dG9yIGl0ID0gbV9kYXRhYmFzZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7
ICsraXQpCiAgICAgICAgIGFkZERhdGFiYXNlU2NyaXB0UmVzb3VyY2UoKCppdCkuZ2V0KCkpOwog
I2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIERvbVN0b3JhZ2VSZXNvdXJjZXNT
ZXQ6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7
CisgICAgZm9yIChEb21TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1fZG9tU3Rv
cmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQorICAgICAg
ICBhZGREb21TdG9yYWdlU2NyaXB0UmVzb3VyY2UoaXQtPmdldCgpKTsKKyNlbmRpZgogCiAgICAg
Y2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJwb3B1
bGF0ZUludGVyZmFjZSIpOwogfQpAQCAtMjE3OSw2ICsyMjMwLDc4IEBACiB9CiAjZW5kaWYKIAor
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKK0pTT2JqZWN0UmVmIEluc3BlY3RvckNvbnRyb2xsZXI6
OmFkZERvbVN0b3JhZ2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2Uq
IHJlc291cmNlKQoreworICAgIEFTU0VSVF9BUkcocmVzb3VyY2UsIHJlc291cmNlKTsKKworICAg
IGlmIChyZXNvdXJjZS0+c2NyaXB0T2JqZWN0KQorICAgICAgICByZXR1cm4gcmVzb3VyY2UtPnNj
cmlwdE9iamVjdDsKKworICAgIEFTU0VSVChtX3NjcmlwdENvbnRleHQpOworICAgIEFTU0VSVCht
X3NjcmlwdE9iamVjdCk7CisgICAgaWYgKCFtX3NjcmlwdENvbnRleHQgfHwgIW1fc2NyaXB0T2Jq
ZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsK
KworICAgIEpTVmFsdWVSZWYgZG9tU3RvcmFnZVByb3BlcnR5ID0gSlNPYmplY3RHZXRQcm9wZXJ0
eShtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0LCBqc1N0cmluZ1JlZigiRG9tU3RvcmFn
ZSIpLmdldCgpLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoSEFORExFX0VYQ0VQVElPTihtX3Njcmlw
dENvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiAwOworCisgICAgSlNPYmplY3RS
ZWYgZG9tU3RvcmFnZUNvbnN0cnVjdG9yID0gSlNWYWx1ZVRvT2JqZWN0KG1fc2NyaXB0Q29udGV4
dCwgZG9tU3RvcmFnZVByb3BlcnR5LCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoSEFORExFX0VYQ0VQ
VElPTihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KU0RPTVdpbmRvdyhyZXNvdXJjZS0+ZnJhbWUuZ2V0KCkp
LT5nbG9iYWxFeGVjKCk7CisKKyAgICBKU1ZhbHVlUmVmIGRvbVN0b3JhZ2U7CisKKyAgICB7Cisg
ICAgICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICBkb21TdG9yYWdlID0gdG9S
ZWYoSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGV4ZWMsIHRvSlMoZXhlYywgcmVzb3Vy
Y2UtPmRvbVN0b3JhZ2UuZ2V0KCkpKSk7CisgICAgfQorCisgICAgSlNWYWx1ZVJlZiBkb21haW5W
YWx1ZSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYocmVz
b3VyY2UtPmRvbWFpbikuZ2V0KCkpOworICAgIEpTVmFsdWVSZWYgaXNMb2NhbFN0b3JhZ2VWYWx1
ZSA9IEpTVmFsdWVNYWtlQm9vbGVhbihtX3NjcmlwdENvbnRleHQsIHJlc291cmNlLT5pc0xvY2Fs
U3RvcmFnZSk7CisKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyBkb21TdG9yYWdlLCBk
b21haW5WYWx1ZSwgaXNMb2NhbFN0b3JhZ2VWYWx1ZSB9OworICAgIEpTT2JqZWN0UmVmIHJlc3Vs
dCA9IEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3IobV9zY3JpcHRDb250ZXh0LCBkb21TdG9yYWdl
Q29uc3RydWN0b3IsIDMsIGFyZ3VtZW50cywgJmV4Y2VwdGlvbik7CisgICAgaWYgKEhBTkRMRV9F
WENFUFRJT04obV9zY3JpcHRDb250ZXh0LCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgY2FsbEZ1bmN0aW9uKG1fc2NyaXB0Q29udGV4
dCwgbV9zY3JpcHRPYmplY3QsICJhZGREb21TdG9yYWdlIiwgMSwgJnJlc3VsdCwgZXhjZXB0aW9u
KTsKKworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmVzb3Vy
Y2UtPnNldFNjcmlwdE9iamVjdChtX3NjcmlwdENvbnRleHQsIHJlc3VsdCk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZURvbVN0b3Jh
Z2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2UqIHJlc291cmNlKQor
eworICAgIEFTU0VSVChtX3NjcmlwdENvbnRleHQpOworICAgIEFTU0VSVChtX3NjcmlwdE9iamVj
dCk7CisgICAgaWYgKCFtX3NjcmlwdENvbnRleHQgfHwgIW1fc2NyaXB0T2JqZWN0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocmVzb3VyY2UpOworICAgIEFTU0VSVChyZXNvdXJjZS0+
c2NyaXB0T2JqZWN0KTsKKyAgICBpZiAoIXJlc291cmNlIHx8ICFyZXNvdXJjZS0+c2NyaXB0T2Jq
ZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBKU09iamVjdFJlZiBzY3JpcHRPYmplY3QgPSBy
ZXNvdXJjZS0+c2NyaXB0T2JqZWN0OworICAgIHJlc291cmNlLT5zZXRTY3JpcHRPYmplY3QoMCwg
MCk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgY2FsbEZ1bmN0aW9uKG1f
c2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJyZW1vdmVEb21TdG9yYWdlIiwgMSwgJnNj
cmlwdE9iamVjdCwgZXhjZXB0aW9uKTsKK30KKyNlbmRpZgorCiB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmFkZFNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IENvbnNvbGVNZXNzYWdlKiBtZXNz
YWdlKQogewogICAgIEFTU0VSVF9BUkcobWVzc2FnZSwgbWVzc2FnZSk7CkBAIC0yMjU4LDYgKzIz
ODEsMTMgQEAKICAgICAgICAgcmVzb3VyY2UtPnNldFNjcmlwdE9iamVjdCgwLCAwKTsKICAgICB9
CiAjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgRG9tU3RvcmFnZVJlc291cmNl
c1NldDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5lbmQo
KTsKKyAgICBmb3IgKERvbVN0b3JhZ2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kb21T
dG9yYWdlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpIHsKKyAg
ICAgICAgSW5zcGVjdG9yRG9tU3RvcmFnZVJlc291cmNlKiByZXNvdXJjZSA9IGl0LT5nZXQoKTsK
KyAgICAgICAgcmVzb3VyY2UtPnNldFNjcmlwdE9iamVjdCgwLCAwKTsKKyAgICB9CisjZW5kaWYK
IAogICAgIGNhbGxTaW1wbGVGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2JqZWN0
LCAicmVzZXQiKTsKIH0KQEAgLTIzMDAsNiArMjQzMCw5IEBACiAjaWYgRU5BQkxFKERBVEFCQVNF
KQogICAgICAgICBtX2RhdGFiYXNlUmVzb3VyY2VzLmNsZWFyKCk7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCisgICAgICAgIG1fZG9tU3RvcmFnZVJlc291cmNlcy5jbGVhcigpOwor
I2VuZGlmCiAKICAgICAgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkgewogICAgICAgICAgICAgcmVz
ZXRTY3JpcHRPYmplY3RzKCk7CkBAIC0yNTU5LDYgKzI2OTIsMjcgQEAKIH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRVc2VE
b21TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgY29uc3QgU3RyaW5nJiBkb21haW4s
IGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBsZW5ndGggPSBtX2RvbVN0b3JhZ2VSZXNvdXJj
ZXMuc2l6ZSgpOworICAgIERvbVN0b3JhZ2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGRvbVN0b3Jh
Z2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChEb21TdG9yYWdl
UmVzb3VyY2VzU2V0OjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KSB7CisgICAgICAgIEluc3BlY3RvckRvbVN0b3Jh
Z2VSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChyZXNvdXJjZS0+
ZnJhbWUuZ2V0KCkgPT0gZnJhbWUgJiYgcmVzb3VyY2UtPmlzTG9jYWxTdG9yYWdlID09IGlzTG9j
YWxTdG9yYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8U3RvcmFn
ZT4gZG9tU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShmcmFtZSwgc3RvcmFnZUFyZWEpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2U+IHJlc291cmNlID0gSW5zcGVjdG9y
RG9tU3RvcmFnZVJlc291cmNlOjpjcmVhdGUoZG9tU3RvcmFnZS5nZXQoKSwgZG9tYWluLCBpc0xv
Y2FsU3RvcmFnZSwgZnJhbWUpOworCisgICAgbV9kb21TdG9yYWdlUmVzb3VyY2VzLmFkZChyZXNv
dXJjZSk7CisgICAgaWYgKHdpbmRvd1Zpc2libGUoKSkKKyAgICAgICAgYWRkRG9tU3RvcmFnZVNj
cmlwdFJlc291cmNlKHJlc291cmNlLmdldCgpKTsKK30KKyNlbmRpZgorCiB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogewogICAg
IGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMJKHJldmlzaW9uIDM5NDk4KQorKysgV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzk1LDYgKzc5NSwxMSBA
QAogICAgIHRoaXMucGFuZWxzLmRhdGFiYXNlcy5hZGREYXRhYmFzZShkYXRhYmFzZSk7CiB9CiAK
K1dlYkluc3BlY3Rvci5hZGREb21TdG9yYWdlID0gZnVuY3Rpb24oZG9tU3RvcmFnZSkKK3sKKyAg
ICB0aGlzLnBhbmVscy5kYXRhYmFzZXMuYWRkRG9tU3RvcmFnZShkb21TdG9yYWdlKTsKK30KKwog
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyV2FzRW5hYmxlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlz
LnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyV2FzRW5hYmxlZCgpOwpJbmRleDogV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlc1BhbmVsLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZXNQYW5lbC5qcwkocmV2aXNpb24gMzk0OTgpCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VzUGFuZWwuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEwICs0NiwyMiBAQAogCiAgICAgdGhpcy5zaWRlYmFyVHJlZSA9IG5ldyBU
cmVlT3V0bGluZSh0aGlzLnNpZGViYXJUcmVlRWxlbWVudCk7CiAKLSAgICB0aGlzLmRhdGFiYXNl
Vmlld3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmRhdGFiYXNl
Vmlld3MuaWQgPSAiZGF0YWJhc2Utdmlld3MiOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLmRhdGFiYXNlVmlld3MpOworICAgIHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50
ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyU2VjdGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiREFUQUJBU0VTIiksIHt9LCB0cnVlKTsKKyAgICB0aGlzLnNpZGViYXJUcmVl
LmFwcGVuZENoaWxkKHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50KTsKKyAgICB0aGlzLmRh
dGFiYXNlc0xpc3RUcmVlRWxlbWVudC5leHBhbmQoKTsKIAorICAgIHRoaXMubG9jYWxTdG9yYWdl
TGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyU2VjdGlvblRyZWVFbGVt
ZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiTE9DQUwtU1RPUkFHRSIpLCB7fSwgdHJ1ZSk7Cisg
ICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZCh0aGlzLmxvY2FsU3RvcmFnZUxpc3RUcmVl
RWxlbWVudCk7CisgICAgdGhpcy5sb2NhbFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuZXhwYW5kKCk7
CisKKyAgICB0aGlzLnNlc3Npb25TdG9yYWdlTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3Bl
Y3Rvci5TaWRlYmFyU2VjdGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiU0VT
U0lPTi1TVE9SQUdFIiksIHt9LCB0cnVlKTsKKyAgICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENo
aWxkKHRoaXMuc2Vzc2lvblN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQpOworICAgIHRoaXMuc2Vzc2lv
blN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuZXhwYW5kKCk7CisKKyAgICB0aGlzLnN0b3JhZ2VWaWV3
cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuc3RvcmFnZVZpZXdz
LmlkID0gInN0b3JhZ2Utdmlld3MiOworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
LnN0b3JhZ2VWaWV3cyk7CisKICAgICB0aGlzLnJlc2V0KCk7CiB9CiAKQEAgLTgxLDggKzkzLDIx
IEBACiAKICAgICAgICAgdGhpcy5fZGF0YWJhc2VzID0gW107CiAKLSAgICAgICAgdGhpcy5zaWRl
YmFyVHJlZS5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLmRhdGFiYXNlVmlld3MucmVt
b3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKHRoaXMuX2RvbVN0b3JhZ2UpIHsKKyAgICAgICAg
ICAgIHZhciBkb21TdG9yYWdlTGVuZ3RoID0gdGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbVN0b3JhZ2VMZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgICAgIHZhciBkb21TdG9yYWdlID0gdGhpcy5fZG9tU3RvcmFnZVtpXTsKKworICAg
ICAgICAgICAgICAgIGRlbGV0ZSBkb21TdG9yYWdlLl9kb21TdG9yYWdlVmlldzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2UgPSBbXTsKKworICAg
ICAgICB0aGlzLmRhdGFiYXNlc0xpc3RUcmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAg
ICAgICB0aGlzLmxvY2FsU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwor
ICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlTGlzdFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7CisgICAgICAgIHRoaXMuc3RvcmFnZVZpZXdzLnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgfSwK
IAogICAgIGhhbmRsZUtleUV2ZW50OiBmdW5jdGlvbihldmVudCkKQEAgLTk2LDggKzEyMSwxOCBA
QAogCiAgICAgICAgIHZhciBkYXRhYmFzZVRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5E
YXRhYmFzZVNpZGViYXJUcmVlRWxlbWVudChkYXRhYmFzZSk7CiAgICAgICAgIGRhdGFiYXNlLl9k
YXRhYmFzZXNUcmVlRWxlbWVudCA9IGRhdGFiYXNlVHJlZUVsZW1lbnQ7CisgICAgICAgIHRoaXMu
ZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKGRhdGFiYXNlVHJlZUVsZW1lbnQp
OworICAgIH0sCiAKLSAgICAgICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZChkYXRhYmFz
ZVRyZWVFbGVtZW50KTsKKyAgICBhZGREb21TdG9yYWdlOiBmdW5jdGlvbihkb21TdG9yYWdlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fZG9tU3RvcmFnZS5wdXNoKGRvbVN0b3JhZ2UpOworICAgICAg
ICB2YXIgZG9tU3RvcmFnZVRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5Eb21TdG9yYWdl
U2lkZWJhclRyZWVFbGVtZW50KGRvbVN0b3JhZ2UpOworICAgICAgICBkb21TdG9yYWdlLl9kb21T
dG9yYWdlVHJlZUVsZW1lbnQgPSBkb21TdG9yYWdlVHJlZUVsZW1lbnQ7CisgICAgICAgIGlmIChk
b21TdG9yYWdlLmlzTG9jYWxTdG9yYWdlKQorICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VM
aXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9tU3RvcmFnZVRyZWVFbGVtZW50KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5h
cHBlbmRDaGlsZChkb21TdG9yYWdlVHJlZUVsZW1lbnQpOwogICAgIH0sCiAKICAgICBzaG93RGF0
YWJhc2U6IGZ1bmN0aW9uKGRhdGFiYXNlLCB0YWJsZU5hbWUpCkBAIC0xMDUsOCArMTQwLDggQEAK
ICAgICAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBp
ZiAodGhpcy52aXNpYmxlRGF0YWJhc2VWaWV3KQotICAgICAgICAgICAgdGhpcy52aXNpYmxlRGF0
YWJhc2VWaWV3LmhpZGUoKTsKKyAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcpCisgICAgICAg
ICAgICB0aGlzLnZpc2libGVWaWV3LmhpZGUoKTsKIAogICAgICAgICB2YXIgdmlldzsKICAgICAg
ICAgaWYgKHRhYmxlTmFtZSkgewpAQCAtMTI1LDE2ICsxNjAsMzYgQEAKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIHZpZXcuc2hvdyh0aGlzLmRhdGFiYXNlVmlld3MpOworICAg
ICAgICB2aWV3LnNob3codGhpcy5zdG9yYWdlVmlld3MpOwogCi0gICAgICAgIHRoaXMudmlzaWJs
ZURhdGFiYXNlVmlldyA9IHZpZXc7CisgICAgICAgIHRoaXMudmlzaWJsZVZpZXcgPSB2aWV3Owog
ICAgIH0sCiAKKyAgICBzaG93RG9tU3RvcmFnZTogZnVuY3Rpb24oZG9tU3RvcmFnZSkKKyAgICB7
CisgICAgICAgIGlmICghZG9tU3RvcmFnZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBpZiAodGhpcy52aXNpYmxlVmlldykKKyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlk
ZSgpOworCisgICAgICAgIHZhciB2aWV3OworICAgICAgICB2aWV3ID0gZG9tU3RvcmFnZS5fZG9t
U3RvcmFnZVZpZXc7CisgICAgICAgIGlmICghdmlldykgeworICAgICAgICAgICAgdmlldyA9IG5l
dyBXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZUl0ZW1zVmlldyhkb21TdG9yYWdlKTsKKyAgICAgICAg
ICAgIGRvbVN0b3JhZ2UuX2RvbVN0b3JhZ2VWaWV3ID0gdmlldzsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpZXcuc2hvdyh0aGlzLnN0b3JhZ2VWaWV3cyk7CisKKyAgICAgICAgdGhpcy52aXNpYmxl
VmlldyA9IHZpZXc7CisgICAgfSwKKwogICAgIGNsb3NlVmlzaWJsZVZpZXc6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIGlmICh0aGlzLnZpc2libGVEYXRhYmFzZVZpZXcpCi0gICAgICAgICAg
ICB0aGlzLnZpc2libGVEYXRhYmFzZVZpZXcuaGlkZSgpOwotICAgICAgICBkZWxldGUgdGhpcy52
aXNpYmxlRGF0YWJhc2VWaWV3OworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKKyAgICAg
ICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgpOworICAgICAgICBkZWxldGUgdGhpcy52aXNp
YmxlVmlldzsKICAgICB9LAogCiAgICAgdXBkYXRlRGF0YWJhc2VUYWJsZXM6IGZ1bmN0aW9uKGRh
dGFiYXNlKQpAQCAtMTU1LDcgKzIxMCw3IEBACiAKICAgICAgICAgZm9yICh2YXIgdGFibGVOYW1l
IGluIGRhdGFiYXNlLl90YWJsZVZpZXdzKSB7CiAgICAgICAgICAgICBpZiAoISh0YWJsZU5hbWUg
aW4gdGFibGVOYW1lc0hhc2gpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZURh
dGFiYXNlVmlldyA9PT0gZGF0YWJhc2UuX3RhYmxlVmlld3NbdGFibGVOYW1lXSkKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyA9PT0gZGF0YWJhc2UuX3RhYmxlVmlld3NbdGFi
bGVOYW1lXSkKICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVZpc2libGVWaWV3KCk7CiAg
ICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFiYXNlLl90YWJsZVZpZXdzW3RhYmxlTmFtZV07CiAg
ICAgICAgICAgICB9CkBAIC0yNDEsNiArMjk2LDU5IEBACiAgICAgICAgIHJldHVybiBkYXRhR3Jp
ZDsKICAgICB9LAogCisgICAgZGF0YUdyaWRGb3JEb21TdG9yYWdlOiBmdW5jdGlvbihkb21TdG9y
YWdlKQorICAgIHsKKyAgICAgICAgaWYgKCFkb21TdG9yYWdlLmxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworCisgICAgICAgIHZhciBjb2x1bW5zID0ge307CisgICAgICAgIGNvbHVt
bnNbMF0gPSB7fTsKKyAgICAgICAgY29sdW1uc1sxXSA9IHt9OworICAgICAgICBjb2x1bW5zWzBd
LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJLZXkiKTsKKyAgICAgICAgY29sdW1uc1sw
XS53aWR0aCA9IGNvbHVtbnNbMF0udGl0bGUubGVuZ3RoOworICAgICAgICBjb2x1bW5zWzFdLnRp
dGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJWYWx1ZSIpOworICAgICAgICBjb2x1bW5zWzFd
LndpZHRoID0gY29sdW1uc1swXS50aXRsZS5sZW5ndGg7CisKKyAgICAgICAgdmFyIG5vZGVzID0g
W107CisgICAgICAgIAorICAgICAgICB2YXIgbGVuZ3RoID0gZG9tU3RvcmFnZS5sZW5ndGg7Cisg
ICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGRvbVN0b3JhZ2UubGVuZ3RoOyBpbmRleCsr
KSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IHt9OworICAgICAgIAorICAgICAgICAgICAgdmFy
IGtleSA9IFN0cmluZyhkb21TdG9yYWdlLmtleShpbmRleCkpOworICAgICAgICAgICAgZGF0YVsw
XSA9IGtleTsKKyAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID4gY29sdW1uc1swXS53aWR0aCkK
KyAgICAgICAgICAgICAgICBjb2x1bW5zWzBdLndpZHRoID0ga2V5Lmxlbmd0aDsKKyAgICAgICAg
CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBTdHJpbmcoZG9tU3RvcmFnZS5nZXRJdGVtKGtleSkp
OworICAgICAgICAgICAgZGF0YVsxXSA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlLmxl
bmd0aCA+IGNvbHVtbnNbMV0ud2lkdGgpCisgICAgICAgICAgICAgICAgY29sdW1uc1sxXS53aWR0
aCA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rv
ci5EYXRhR3JpZE5vZGUoZGF0YSwgZmFsc2UpOworICAgICAgICAgICAgbm9kZS5zZWxlY3RhYmxl
ID0gZmFsc2U7CisgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHRvdGFsQ29sdW1uV2lkdGhzID0gY29sdW1uc1swXS53aWR0aCArIGNvbHVtbnNb
MV0ud2lkdGg7CisgICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCgoY29sdW1uc1swXS53aWR0aCAq
IDEwMCkgLyB0b3RhbENvbHVtbldpZHRocyk7CisgICAgICAgIGNvbnN0IG1pbmltdW1QcmVjZW50
ID0gMTA7CisgICAgICAgIGlmICh3aWR0aCA8IG1pbmltdW1QcmVjZW50KQorICAgICAgICAgICAg
d2lkdGggPSBtaW5pbXVtUHJlY2VudDsKKyAgICAgICAgaWYgKHdpZHRoID4gMTAwIC0gbWluaW11
bVByZWNlbnQpCisgICAgICAgICAgICB3aWR0aCA9IDEwMCAtIG1pbmltdW1QcmVjZW50OworICAg
ICAgICBjb2x1bW5zWzBdLndpZHRoID0gd2lkdGg7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGgg
PSAxMDAgLSB3aWR0aDsKKyAgICAgICAgY29sdW1uc1swXS53aWR0aCArPSAiJSI7CisgICAgICAg
IGNvbHVtbnNbMV0ud2lkdGggKz0gIiUiOworCisgICAgICAgIHZhciBkYXRhR3JpZCA9IG5ldyBX
ZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7CisgICAgICAgIHZhciBsZW5ndGggPSBub2Rl
cy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBkYXRhR3JpZC5hcHBlbmRDaGlsZChub2Rlc1tpXSk7CisKKyAgICAgICAgcmV0dXJu
IGRhdGFHcmlkOworICAgIH0sCisKICAgICBfc3RhcnRTaWRlYmFyRHJhZ2dpbmc6IGZ1bmN0aW9u
KGV2ZW50KQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQodGhp
cy5zaWRlYmFyUmVzaXplRWxlbWVudCwgdGhpcy5fc2lkZWJhckRyYWdnaW5nLmJpbmQodGhpcyks
IHRoaXMuX2VuZFNpZGViYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCBldmVudCwgImNvbC1yZXNpemUi
KTsKQEAgLTI3Nyw3ICszODUsNyBAQAogICAgICAgICB0aGlzLl9jdXJyZW50U2lkZWJhcldpZHRo
ID0gd2lkdGg7CiAKICAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdp
ZHRoICsgInB4IjsKLSAgICAgICAgdGhpcy5kYXRhYmFzZVZpZXdzLnN0eWxlLmxlZnQgPSB3aWR0
aCArICJweCI7CisgICAgICAgIHRoaXMuc3RvcmFnZVZpZXdzLnN0eWxlLmxlZnQgPSB3aWR0aCAr
ICJweCI7CiAgICAgICAgIHRoaXMuc2lkZWJhclJlc2l6ZUVsZW1lbnQuc3R5bGUubGVmdCA9ICh3
aWR0aCAtIDMpICsgInB4IjsKICAgICB9CiB9CkBAIC0zNTUsMyArNDYzLDQyIEBACiB9CiAKIFdl
Ykluc3BlY3Rvci5TaWRlYmFyRGF0YWJhc2VUYWJsZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZTsKKworV2Vi
SW5zcGVjdG9yLkRvbVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihkb21TdG9y
YWdlKQoreworCisgICAgdGhpcy5kb21TdG9yYWdlID0gZG9tU3RvcmFnZTsKKworICAgIFdlYklu
c3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCAiZG9tc3RvcmFnZS1zaWRlYmFy
LXRyZWUtaXRlbSIsIGRvbVN0b3JhZ2UsICIiLCBudWxsLCBmYWxzZSk7CisKKyAgICB0aGlzLnJl
ZnJlc2hUaXRsZXMoKTsKK30KKworV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2VTaWRlYmFyVHJlZUVs
ZW1lbnQucHJvdG90eXBlID0geworICAgIG9uc2VsZWN0OiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmRhdGFiYXNlcy5zaG93RG9tU3RvcmFnZSh0aGlzLmRv
bVN0b3JhZ2UpOworICAgIH0sCisKKyAgICBnZXQgbWFpblRpdGxlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLmRvbVN0b3JhZ2UuZG9tYWluOworICAgIH0sCisKKyAgICBzZXQgbWFpblRp
dGxlKHgpCisgICAgeworICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgIH0sCisKKyAgICBnZXQg
c3VidGl0bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICIiOyAvL3RoaXMuZGF0YWJhc2UuZGlz
cGxheURvbWFpbjsKKyAgICB9LAorCisgICAgc2V0IHN1YnRpdGxlKHgpCisgICAgeworICAgICAg
ICAvLyBEbyBub3RoaW5nLgorICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2VTaWRl
YmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5TaWRlYmFy
VHJlZUVsZW1lbnQucHJvdG90eXBlOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RvbVN0b3JhZ2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RvbVN0b3JhZ2UuanMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRG9tU3RvcmFnZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBOb2tpYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Eb21TdG9yYWdlID0gZnVuY3Rpb24oZG9t
U3RvcmFnZSwgZG9tYWluLCBpc0xvY2FsU3RvcmFnZSkKK3sKKyAgICB0aGlzLmRvbVN0b3JhZ2Ug
PSBkb21TdG9yYWdlOworICAgIHRoaXMuZG9tYWluID0gZG9tYWluOworICAgIHRoaXMuaXNMb2Nh
bFN0b3JhZ2UgPSBpc0xvY2FsU3RvcmFnZTsKK30KKworV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2Uu
cHJvdG90eXBlID0geworICAgIGdldCBkb21TdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9kb21TdG9yYWdlOworICAgIH0sCisKKyAgICBzZXQgZG9tU3RvcmFnZSh4KQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX2RvbVN0b3JhZ2UgPT09IHgpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2UgPSB4OworICAgIH0sCisKKyAgICBnZXQgZG9t
YWluKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9kb21haW47CisgICAgfSwKKworICAg
IHNldCBkb21haW4oeCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9kb21haW4gPT09IHgpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2RvbWFpbiA9IHg7CisgICAgfSwKKyAg
ICAKKyAgICBnZXQgaXNMb2NhbFN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2lzTG9jYWxTdG9yYWdlOworICAgIH0sCisgICAgCisgICAgc2V0IGlzTG9jYWxTdG9yYWdlKHgp
CisgICAgeworICAgICAgICBpZiAodGhpcy5faXNMb2NhbFN0b3JhZ2UgPT09IHgpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2lzTG9jYWxTdG9yYWdlID0geDsKKyAgICB9Cit9
CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwkocmV2aXNp
b24gMzk0OTgpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwko
d29ya2luZyBjb3B5KQpAQCAtMTUyOCw3ICsxNTI4LDExIEBACiAgICAgY29udGVudDogdXJsKElt
YWdlcy9kYXRhYmFzZVRhYmxlLnBuZyk7CiB9CiAKLSNkYXRhYmFzZS12aWV3cyB7CisuZG9tc3Rv
cmFnZS1zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7CisgICAgY29udGVudDogdXJsKEltYWdlcy9k
b21TdG9yYWdlLnBuZyk7Cit9CisKKyNzdG9yYWdlLXZpZXdzIHsKICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CiAgICAgdG9wOiAwOwogICAgIHJpZ2h0OiAwOwpAQCAtMTUzNiw3ICsxNTQwLDcgQEAK
ICAgICBib3R0b206IDA7CiB9CiAKLS5kYXRhYmFzZS12aWV3IHsKKy5kYXRhYmFzZS12aWV3LCAu
ZG9tc3RvcmFnZS12aWV3IHsKICAgICBkaXNwbGF5OiBub25lOwogICAgIG92ZXJmbG93OiBoaWRk
ZW47CiAgICAgcG9zaXRpb246IGFic29sdXRlOwpAQCAtMTU0NiwyMCArMTU1MCwyMCBAQAogICAg
IGJvdHRvbTogMDsKIH0KIAotLmRhdGFiYXNlLXZpZXcudmlzaWJsZSB7CisuZGF0YWJhc2Utdmll
dy52aXNpYmxlLCAuZG9tc3RvcmFnZS12aWV3LnZpc2libGUgewogICAgIGRpc3BsYXk6IGJsb2Nr
OwogfQogCi0uZGF0YWJhc2Utdmlldy50YWJsZSB7CisuZGF0YWJhc2Utdmlldy50YWJsZSwgLmRv
bXN0b3JhZ2Utdmlldy50YWJsZSB7CiAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKIH0KIAotLmRhdGFi
YXNlLXZpZXcudGFibGUgLmRhdGEtZ3JpZCB7CisuZGF0YWJhc2Utdmlldy50YWJsZSAuZGF0YS1n
cmlkLCAuZG9tc3RvcmFnZS12aWV3LnRhYmxlIC5kYXRhLWdyaWQgewogICAgIGJvcmRlcjogbm9u
ZTsKICAgICBoZWlnaHQ6IDEwMCU7CiB9CiAKLS5kYXRhYmFzZS12aWV3LnRhYmxlIC5kYXRhYmFz
ZS10YWJsZS1lbXB0eSwgLmRhdGFiYXNlLXZpZXcudGFibGUgLmRhdGFiYXNlLXRhYmxlLWVycm9y
IHsKKy5kYXRhYmFzZS12aWV3LnRhYmxlIC5kYXRhYmFzZS10YWJsZS1lbXB0eSwgLmRhdGFiYXNl
LXZpZXcudGFibGUgLmRhdGFiYXNlLXRhYmxlLWVycm9yLCAuZG9tc3RvcmFnZS12aWV3LnRhYmxl
IC5kb21zdG9yYWdlLXRhYmxlLWVtcHR5LCAuZG9tc3RvcmFnZS12aWV3LnRhYmxlIC5kb21zdG9y
YWdlLXRhYmxlLWVycm9yIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiAwOwog
ICAgIGJvdHRvbTogMjUlOwpAQCAtMTU3Nyw3ICsxNTgxLDcgQEAKICAgICB3aGl0ZS1zcGFjZTog
cHJlLXdyYXA7CiB9CiAKLS5kYXRhYmFzZS12aWV3LnRhYmxlIC5kYXRhYmFzZS10YWJsZS1lcnJv
ciB7CisuZGF0YWJhc2Utdmlldy50YWJsZSAuZGF0YWJhc2UtdGFibGUtZXJyb3IsIC5kb21zdG9y
YWdlLXZpZXcudGFibGUgLmRvbXN0b3JhZ2UtdGFibGUtZXJyb3IgewogICAgIGNvbG9yOiByZ2Io
NjYlLCAzMyUsIDMzJSk7CiB9CiAKQEAgLTI0OTQsNiArMjQ5OCwxMCBAQAogICAgIHBhZGRpbmct
bGVmdDogMzdweDsKIH0KIAorLnNpZGViYXItdHJlZSA+IC5jaGlsZHJlbiA+IC5jaGlsZHJlbiA+
IC5zaWRlYmFyLXRyZWUtaXRlbSB7CisgICAgcGFkZGluZy1sZWZ0OiAzN3B4OworfQorCiAuc2lk
ZWJhci10cmVlLmhpZGUtZGlzY2xvc3VyZS1idXR0b25zID4gLmNoaWxkcmVuIHsKICAgICBkaXNw
bGF5OiBub25lOwogfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9k
b21TdG9yYWdlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Rv
bVN0b3JhZ2UucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYwkocmV2aXNpb24gMzk0OTgpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYwkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsOCBAQAogICAgIDxmaWxlPkRhdGFi
YXNlc1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFiYXNlVGFibGVWaWV3LmpzPC9maWxl
PgogICAgIDxmaWxlPkRhdGFHcmlkLmpzPC9maWxlPgorICAgIDxmaWxlPkRvbVN0b3JhZ2UuanM8
L2ZpbGU+CisgICAgPGZpbGU+RG9tU3RvcmFnZUl0ZW1zVmlldy5qczwvZmlsZT4KICAgICA8Zmls
ZT5FbGVtZW50c1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkVsZW1lbnRzVHJlZU91dGxpbmUu
anM8L2ZpbGU+CiAgICAgPGZpbGU+Rm9udFZpZXcuanM8L2ZpbGU+CkBAIC02Niw2ICs2OCw3IEBA
CiAgICAgPGZpbGU+SW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmdsZVNtYWxsUmlnaHREb3duV2hpdGUu
cG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9kaXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0
V2hpdGUucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9kb2NrQnV0dG9ucy5wbmc8L2ZpbGU+
CisgICAgPGZpbGU+SW1hZ2VzL2RvbVN0b3JhZ2UucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdl
cy9lbGVtZW50c0ljb24ucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9lbmFibGVCdXR0b25z
LnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvZXJyb3JJY29uLnBuZzwvZmlsZT4KSW5kZXg6
IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwJKHJldmlzaW9uIDM5
NDk4KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iUmVzb3VyY2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlQ2F0ZWdvcnkuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRhdGFiYXNlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEb21TdG9yYWdlLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEb21TdG9y
YWdlSXRlbXNWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJEYXRhR3JpZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJCcmVha3BvaW50LmpzIj48L3NjcmlwdD4KSW5kZXg6IFdl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Eb21TdG9yYWdlSXRlbXNWaWV3LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Eb21TdG9yYWdlSXRlbXNWaWV3Lmpz
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RvbVN0b3JhZ2VJ
dGVtc1ZpZXcuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggTm9raWEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Eb21TdG9yYWdlSXRlbXNWaWV3ID0gZnVu
Y3Rpb24oZG9tU3RvcmFnZSkKK3sKKyAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwor
CisgICAgdGhpcy5kb21TdG9yYWdlID0gZG9tU3RvcmFnZTsKKworICAgIHRoaXMuZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJkb21zdG9yYWdlLXZpZXciKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkU3R5
bGVDbGFzcygidGFibGUiKTsKK30KKworV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2VJdGVtc1ZpZXcu
cHJvdG90eXBlID0geworICAgIHNob3c6IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQpCisgICAgewor
ICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc2hvdy5jYWxsKHRoaXMsIHBhcmVu
dEVsZW1lbnQpOworICAgICAgICB0aGlzLnVwZGF0ZSgpOworICAgIH0sCisKKyAgICB1cGRhdGU6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigp
OworICAgICAgICB2YXIgaGFzRG9tU3RvcmFnZSA9IHRoaXMuZG9tU3RvcmFnZTsKKyAgICAgICAg
aWYgKGhhc0RvbVN0b3JhZ2UpCisgICAgICAgICAgICBoYXNEb21TdG9yYWdlID0gdGhpcy5kb21T
dG9yYWdlLmRvbVN0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBpZiAoaGFzRG9tU3RvcmFnZSkg
eworICAgICAgICAgICAgdmFyIGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFz
ZXMuZGF0YUdyaWRGb3JEb21TdG9yYWdlKHRoaXMuZG9tU3RvcmFnZS5kb21TdG9yYWdlKTsKKyAg
ICAgICAgICAgIGlmICghZGF0YUdyaWQpCisgICAgICAgICAgICAgICAgaGFzRG9tU3RvcmFnZSA9
IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKGRhdGFHcmlkLmVsZW1lbnQpOworICAgICAgICB9CisgICAgICAgIGlmICghaGFzRG9t
U3RvcmFnZSkgeworICAgICAgICAgICAgdmFyIGVtcHR5TXNnRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgZW1wdHlNc2dFbGVtZW50LmNsYXNzTmFt
ZSA9ICJkb21zdG9yYWdlLXRhYmxlLWVtcHR5IjsKKyAgICAgICAgICAgIGlmICh0aGlzLmRvbVN0
b3JhZ2UpCisgICAgICAgICAgICBlbXB0eU1zZ0VsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlRoaXMgc3RvcmFnZSBpcyBlbXB0eS4iKTsKKyAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZChlbXB0eU1zZ0VsZW1lbnQpOworICAgICAgICB9CisgICAg
fQorfQorCitXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZUl0ZW1zVmlldy5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26312</attachid>
            <date>2008-12-30 10:45:49 -0800</date>
            <delta_ts>2009-02-04 11:24:18 -0800</delta_ts>
            <desc>This patch is addressing comment #2.</desc>
            <filename>inspector1.patch</filename>
            <type>text/plain</type>
            <size>32096</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTUxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDgtMTItMzAgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFBhcnRpYWwgZml4IGZvciA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMDUxPgorICAgICAgICBJbmNsdWRlIGxvY2FsU3RvcmFnZSBhbmQgc2Vzc2lvblN0b3JhZ2Ug
aW4gRGF0YWJhc2VzUGFuZWwuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2U6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2U6
OnNldFNjcmlwdE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEb21TdG9yYWdl
UmVzb3VyY2U6Okluc3BlY3RvckRvbVN0b3JhZ2VSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkRG9tU3RvcmFnZVNjcmlwdFJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZURvbVN0b3Jh
Z2VTY3JpcHRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpyZXNldFNjcmlwdE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpkaWRVc2VEb21TdG9yYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VzUGFuZWwu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRhdGFiYXNlc1BhbmVsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwucHJvdG90eXBlLmFkZERhdGFiYXNlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuYWRkRG9tU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwucHJvdG90eXBlLnNob3dEYXRhYmFz
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwucHJvdG90eXBlLnNob3dE
b21TdG9yYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5
cGUuY2xvc2VWaXNpYmxlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFu
ZWwucHJvdG90eXBlLnVwZGF0ZURhdGFiYXNlVGFibGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuZGF0YUdyaWRGb3JEb21TdG9yYWdlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZVNpZGViYXJX
aWR0aCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVudC5w
cm90b3R5cGUub25zZWxlY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2VTaWRl
YmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBtYWluVGl0bGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRvbVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLnNldCBtYWluVGl0
bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQu
cHJvdG90eXBlLmdldCBzdWJ0aXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3RvcmFn
ZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUuc2V0IHN1YnRpdGxlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0RvbVN0b3JhZ2UuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRvbVN0b3JhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2UucHJv
dG90eXBlLmdldCBkb21TdG9yYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Eb21TdG9yYWdl
LnByb3RvdHlwZS5zZXQgZG9tU3RvcmFnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3Rv
cmFnZS5wcm90b3R5cGUuZ2V0IGRvbWFpbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3Rv
cmFnZS5wcm90b3R5cGUuc2V0IGRvbWFpbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRG9tU3Rv
cmFnZS5wcm90b3R5cGUuZ2V0IGlzTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Eb21TdG9yYWdlLnByb3RvdHlwZS5zZXQgaXNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvRG9tU3RvcmFnZUl0ZW1zVmlldy5qczogQWRkZWQuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZUl0ZW1zVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRG9tU3RvcmFnZUl0ZW1zVmlldy5wcm90b3R5cGUuc2hvdyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRG9tU3RvcmFnZUl0ZW1zVmlldy5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kb21TdG9yYWdlLnBuZzogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmNzczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmFkZERvbVN0b3JhZ2UpOgorICAgICAgICAqIHBhZ2Uv
RE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6c2Vzc2lvblN0b3Jh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2UpOgorCiAyMDA4
LTEyLTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQW50dGkgS29pdmlzdG8uCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMzk0OTgp
CisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiAr
NDYsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9jYXRpb24uaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQu
aCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKQEAgLTMyNyw2ICszMjgsOCBAQAogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBwYWdlLT5z
ZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7
CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaWRVc2VEb21TdG9yYWdlKHN0b3Jh
Z2VBcmVhLmdldCgpLCBmYWxzZSwgbV9mcmFtZSk7CisKICAgICBtX3Nlc3Npb25TdG9yYWdlID0g
U3RvcmFnZTo6Y3JlYXRlKG1fZnJhbWUsIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKSk7CiAgICAgcmV0
dXJuIG1fc2Vzc2lvblN0b3JhZ2UuZ2V0KCk7CiB9CkBAIC0zNDcsOCArMzUwLDEwIEBACiAKICAg
ICBMb2NhbFN0b3JhZ2UqIGxvY2FsU3RvcmFnZSA9IHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdl
KCk7CiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGxvY2FsU3RvcmFnZSA/
IGxvY2FsU3RvcmFnZS0+c3RvcmFnZUFyZWEobV9mcmFtZSwgZG9jdW1lbnQtPnNlY3VyaXR5T3Jp
Z2luKCkpIDogMDsgCi0gICAgaWYgKHN0b3JhZ2VBcmVhKQorICAgIGlmIChzdG9yYWdlQXJlYSkg
eworICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmRpZFVzZURvbVN0b3JhZ2Uo
c3RvcmFnZUFyZWEuZ2V0KCksIHRydWUsIG1fZnJhbWUpOwogICAgICAgICBtX2xvY2FsU3RvcmFn
ZSA9IFN0b3JhZ2U6OmNyZWF0ZShtX2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNlKCkpOworICAg
IH0KIAogICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZS5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDM5NDk4KQorKysgV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2
ICs1Nyw3IEBACiBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owog
Y2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKK2NsYXNzIFN0b3JhZ2VBcmVhOwogY2xhc3MgTm9k
ZTsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwpAQCAtNjYsNiArNjcsNyBA
QAogCiBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2U7CiBzdHJ1Y3QgSW5zcGVjdG9yRGF0YWJhc2VSZXNv
dXJjZTsKK3N0cnVjdCBJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2U7CiBzdHJ1Y3QgSW5zcGVj
dG9yUmVzb3VyY2U7CiBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAKQEAgLTc4LDYgKzgwLDcgQEAK
ICAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZyBsb25nLCBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+
ID4gUmVzb3VyY2VzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RnJhbWU+LCBSZXNv
dXJjZXNNYXAqPiBGcmFtZVJlc291cmNlc01hcDsKICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNTZXQ7CisgICAg
dHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2U+ID4gRG9t
U3RvcmFnZVJlc291cmNlc1NldDsKIAogICAgIHR5cGVkZWYgZW51bSB7CiAgICAgICAgIEN1cnJl
bnRQYW5lbCwKQEAgLTIwOSw2ICsyMTIsOSBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICB2
b2lkIGRpZE9wZW5EYXRhYmFzZShEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCisgICAgdm9pZCBkaWRVc2VEb21TdG9yYWdlKFN0b3JhZ2VBcmVhKiBz
dG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKTsKKyNlbmRpZgog
CiAgICAgY29uc3QgUmVzb3VyY2VzTWFwJiByZXNvdXJjZXMoKSBjb25zdCB7IHJldHVybiBtX3Jl
c291cmNlczsgfQogCkBAIC0yNzMsNiArMjc5LDEwIEBACiAgICAgSlNPYmplY3RSZWYgYWRkRGF0
YWJhc2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKik7CiAgICAgdm9p
ZCByZW1vdmVEYXRhYmFzZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2Uq
KTsKICNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBKU09iamVjdFJlZiBhZGRE
b21TdG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRG9tU3RvcmFnZVJlc291cmNlKik7Cisg
ICAgdm9pZCByZW1vdmVEb21TdG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRG9tU3RvcmFn
ZVJlc291cmNlKik7CisjZW5kaWYKIAogICAgIEpTVmFsdWVSZWYgY2FsbFNpbXBsZUZ1bmN0aW9u
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lKSBjb25zdDsKICAgICBKU1ZhbHVlUmVmIGNhbGxGdW5jdGlvbihKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYm
IGV4Y2VwdGlvbikgY29uc3Q7CkBAIC0zMDIsNiArMzEyLDkgQEAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNTZXQgbV9kYXRhYmFzZVJlc291cmNlczsKICNlbmRp
ZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBEb21TdG9yYWdlUmVzb3VyY2VzU2V0IG1f
ZG9tU3RvcmFnZVJlc291cmNlczsKKyNlbmRpZgogICAgIEpTT2JqZWN0UmVmIG1fc2NyaXB0T2Jq
ZWN0OwogICAgIEpTT2JqZWN0UmVmIG1fY29udHJvbGxlclNjcmlwdE9iamVjdDsKICAgICBKU0Nv
bnRleHRSZWYgbV9zY3JpcHRDb250ZXh0OwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM5NDk4KQorKysgV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAK
ICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1Jl
Zi5oPgpAQCAtODIsNiArODMsMTIgQEAKICNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCiAjZW5kaWYK
IAorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJTdG9yYWdlLmgiCisjaW5jbHVk
ZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgpAQCAtNDQ1LDYgKzQ1Miw0
NCBAQAogfTsKICNlbmRpZgogCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorc3RydWN0IEluc3Bl
Y3RvckRvbVN0b3JhZ2VSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckRvbVN0
b3JhZ2VSZXNvdXJjZT4geworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRvbVN0b3Jh
Z2VSZXNvdXJjZT4gY3JlYXRlKFN0b3JhZ2UqIGRvbVN0b3JhZ2UsIGJvb2wgaXNMb2NhbFN0b3Jh
Z2UsIEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yRG9tU3RvcmFnZVJlc291cmNlKGRvbVN0b3JhZ2UsIGlzTG9jYWxTdG9yYWdlLCBmcmFt
ZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBuZXdTY3JpcHRPYmplY3QpCisgICAgeworICAgICAgICBpZiAoc2Ny
aXB0Q29udGV4dCAmJiBzY3JpcHRPYmplY3QpCisgICAgICAgICAgICBKU1ZhbHVlVW5wcm90ZWN0
KHNjcmlwdENvbnRleHQsIHNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgc2NyaXB0T2JqZWN0ID0g
bmV3U2NyaXB0T2JqZWN0OworICAgICAgICBzY3JpcHRDb250ZXh0ID0gY29udGV4dDsKKworICAg
ICAgICBBU1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNvbnRleHQgJiYg
IW5ld1NjcmlwdE9iamVjdCkpOworICAgICAgICBpZiAoY29udGV4dCAmJiBuZXdTY3JpcHRPYmpl
Y3QpCisgICAgICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRPYmplY3Qp
OworICAgIH0KKworICAgIFJlZlB0cjxTdG9yYWdlPiBkb21TdG9yYWdlOworICAgIGJvb2wgaXNM
b2NhbFN0b3JhZ2U7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZTsKKyAgICBKU0NvbnRleHRSZWYg
c2NyaXB0Q29udGV4dDsKKyAgICBKU09iamVjdFJlZiBzY3JpcHRPYmplY3Q7CisgICAgCitwcml2
YXRlOgorICAgIEluc3BlY3RvckRvbVN0b3JhZ2VSZXNvdXJjZShTdG9yYWdlKiBkb21TdG9yYWdl
LCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCisgICAgICAgIDogZG9tU3RvcmFn
ZShkb21TdG9yYWdlKQorICAgICAgICAsIGlzTG9jYWxTdG9yYWdlKGlzTG9jYWxTdG9yYWdlKQor
ICAgICAgICAsIGZyYW1lKGZyYW1lKQorICAgICAgICAsIHNjcmlwdENvbnRleHQoMCkKKyAgICAg
ICAgLCBzY3JpcHRPYmplY3QoMCkKKyAgICB7CisgICAgfQorfTsKKyNlbmRpZgorCiAvLyBKYXZh
U2NyaXB0IENhbGxiYWNrcwogCiAjZGVmaW5lIFNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJBQ0soanNG
dW5jdGlvbiwgaW5zcGVjdG9yQ29udHJvbGxlck1ldGhvZCkgXApAQCAtMjA5OCw2ICsyMTQzLDEx
IEBACiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFi
YXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKICAgICAgICAg
YWRkRGF0YWJhc2VTY3JpcHRSZXNvdXJjZSgoKml0KS5nZXQoKSk7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCisgICAgRG9tU3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0b3IgZG9t
U3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5lbmQoKTsKKyAgICBmb3IgKERvbVN0
b3JhZ2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCisgICAgICAgIGFkZERvbVN0b3JhZ2VT
Y3JpcHRSZXNvdXJjZShpdC0+Z2V0KCkpOworI2VuZGlmCiAKICAgICBjYWxsU2ltcGxlRnVuY3Rp
b24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInBvcHVsYXRlSW50ZXJmYWNlIik7
CiB9CkBAIC0yMTc5LDYgKzIyMjksNzggQEAKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorSlNPYmplY3RSZWYgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkRG9tU3RvcmFnZVNj
cmlwdFJlc291cmNlKEluc3BlY3RvckRvbVN0b3JhZ2VSZXNvdXJjZSogcmVzb3VyY2UpCit7Cisg
ICAgQVNTRVJUX0FSRyhyZXNvdXJjZSwgcmVzb3VyY2UpOworCisgICAgaWYgKHJlc291cmNlLT5z
Y3JpcHRPYmplY3QpCisgICAgICAgIHJldHVybiByZXNvdXJjZS0+c2NyaXB0T2JqZWN0OworCisg
ICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4dCk7CisgICAgQVNTRVJUKG1fc2NyaXB0T2JqZWN0KTsK
KyAgICBpZiAoIW1fc2NyaXB0Q29udGV4dCB8fCAhbV9zY3JpcHRPYmplY3QpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworCisgICAgSlNWYWx1ZVJl
ZiBkb21TdG9yYWdlUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KG1fc2NyaXB0Q29udGV4
dCwgbV9zY3JpcHRPYmplY3QsIGpzU3RyaW5nUmVmKCJEb21TdG9yYWdlIikuZ2V0KCksICZleGNl
cHRpb24pOworICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwgZXhjZXB0
aW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU09iamVjdFJlZiBkb21TdG9yYWdlQ29u
c3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QobV9zY3JpcHRDb250ZXh0LCBkb21TdG9yYWdlUHJv
cGVydHksICZleGNlcHRpb24pOworICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29u
dGV4dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFeGVjU3RhdGUqIGV4
ZWMgPSB0b0pTRE9NV2luZG93KHJlc291cmNlLT5mcmFtZS5nZXQoKSktPmdsb2JhbEV4ZWMoKTsK
KworICAgIEpTVmFsdWVSZWYgZG9tU3RvcmFnZTsKKworICAgIHsKKyAgICAgICAgSlNDOjpKU0xv
Y2sgbG9jayhmYWxzZSk7CisgICAgICAgIGRvbVN0b3JhZ2UgPSB0b1JlZihKU0luc3BlY3RlZE9i
amVjdFdyYXBwZXI6OndyYXAoZXhlYywgdG9KUyhleGVjLCByZXNvdXJjZS0+ZG9tU3RvcmFnZS5n
ZXQoKSkpKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIGRvbWFpblZhbHVlID0gSlNWYWx1ZU1h
a2VTdHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+ZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmRvbWFpbigpKS5nZXQoKSk7CisgICAgSlNWYWx1
ZVJlZiBpc0xvY2FsU3RvcmFnZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKG1fc2NyaXB0Q29u
dGV4dCwgcmVzb3VyY2UtPmlzTG9jYWxTdG9yYWdlKTsKKworICAgIEpTVmFsdWVSZWYgYXJndW1l
bnRzW10gPSB7IGRvbVN0b3JhZ2UsIGRvbWFpblZhbHVlLCBpc0xvY2FsU3RvcmFnZVZhbHVlIH07
CisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcihtX3Nj
cmlwdENvbnRleHQsIGRvbVN0b3JhZ2VDb25zdHJ1Y3RvciwgMywgYXJndW1lbnRzLCAmZXhjZXB0
aW9uKTsKKyAgICBpZiAoSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4Y2VwdGlv
bikpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBjYWxs
RnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgImFkZERvbVN0b3JhZ2Ui
LCAxLCAmcmVzdWx0LCBleGNlcHRpb24pOworCisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXNvdXJjZS0+c2V0U2NyaXB0T2JqZWN0KG1fc2NyaXB0Q29udGV4
dCwgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVtb3ZlRG9tU3RvcmFnZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRvbVN0b3Jh
Z2VSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4dCk7Cisg
ICAgQVNTRVJUKG1fc2NyaXB0T2JqZWN0KTsKKyAgICBpZiAoIW1fc2NyaXB0Q29udGV4dCB8fCAh
bV9zY3JpcHRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChyZXNvdXJjZSk7
CisgICAgQVNTRVJUKHJlc291cmNlLT5zY3JpcHRPYmplY3QpOworICAgIGlmICghcmVzb3VyY2Ug
fHwgIXJlc291cmNlLT5zY3JpcHRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEpTT2Jq
ZWN0UmVmIHNjcmlwdE9iamVjdCA9IHJlc291cmNlLT5zY3JpcHRPYmplY3Q7CisgICAgcmVzb3Vy
Y2UtPnNldFNjcmlwdE9iamVjdCgwLCAwKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0g
MDsKKyAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInJl
bW92ZURvbVN0b3JhZ2UiLCAxLCAmc2NyaXB0T2JqZWN0LCBleGNlcHRpb24pOworfQorI2VuZGlm
CisKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29u
c3QgQ29uc29sZU1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUX0FSRyhtZXNzYWdlLCBt
ZXNzYWdlKTsKQEAgLTIyNTgsNiArMjM4MCwxMyBAQAogICAgICAgICByZXNvdXJjZS0+c2V0U2Ny
aXB0T2JqZWN0KDAsIDApOwogICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KyAgICBEb21TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9k
b21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoRG9tU3RvcmFnZVJlc291cmNlc1Nl
dDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9t
U3RvcmFnZUVuZDsgKytpdCkgeworICAgICAgICBJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2Uq
IHJlc291cmNlID0gaXQtPmdldCgpOworICAgICAgICByZXNvdXJjZS0+c2V0U2NyaXB0T2JqZWN0
KDAsIDApOworICAgIH0KKyNlbmRpZgogCiAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1fc2NyaXB0
Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJyZXNldCIpOwogfQpAQCAtMjMwMCw2ICsyNDI5LDkg
QEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIG1fZGF0YWJhc2VSZXNvdXJjZXMuY2xl
YXIoKTsKICNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICAgICAgbV9kb21TdG9y
YWdlUmVzb3VyY2VzLmNsZWFyKCk7CisjZW5kaWYKIAogICAgICAgICBpZiAod2luZG93VmlzaWJs
ZSgpKSB7CiAgICAgICAgICAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKQEAgLTI1NTksNiArMjY5
MSwyNyBAQAogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCit2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZFVzZURvbVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVh
LCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFlbmFibGVk
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQgbGVuZ3RoID0gbV9kb21TdG9yYWdlUmVzb3Vy
Y2VzLnNpemUoKTsKKyAgICBEb21TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkb21TdG9y
YWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoRG9tU3RvcmFn
ZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgeworICAgICAgICBJbnNwZWN0b3JEb21TdG9y
YWdlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPmdldCgpOworICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UocmVzb3VyY2UtPmZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5k
b21haW4oKSwgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmRvbWFpbigpKSAm
JiByZXNvdXJjZS0+aXNMb2NhbFN0b3JhZ2UgPT0gaXNMb2NhbFN0b3JhZ2UpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxTdG9yYWdlPiBkb21TdG9yYWdlID0gU3RvcmFn
ZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7CisgICAgUmVmUHRyPEluc3BlY3RvckRvbVN0
b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JEb21TdG9yYWdlUmVzb3VyY2U6OmNy
ZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpOworCisgICAgbV9k
b21TdG9yYWdlUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisgICAgaWYgKHdpbmRvd1Zpc2libGUo
KSkKKyAgICAgICAgYWRkRG9tU3RvcmFnZVNjcmlwdFJlc291cmNlKHJlc291cmNlLmdldCgpKTsK
K30KKyNlbmRpZgorCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdmVXaW5kb3dCeShmbG9h
dCB4LCBmbG9hdCB5KSBjb25zdAogewogICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVkKCkpCklu
ZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMJKHJldmlzaW9uIDM5
NDk4KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNzk1LDYgKzc5NSwxMSBAQAogICAgIHRoaXMucGFuZWxzLmRhdGFiYXNlcy5h
ZGREYXRhYmFzZShkYXRhYmFzZSk7CiB9CiAKK1dlYkluc3BlY3Rvci5hZGREb21TdG9yYWdlID0g
ZnVuY3Rpb24oZG9tU3RvcmFnZSkKK3sKKyAgICB0aGlzLnBhbmVscy5kYXRhYmFzZXMuYWRkRG9t
U3RvcmFnZShkb21TdG9yYWdlKTsKK30KKwogV2ViSW5zcGVjdG9yLmRlYnVnZ2VyV2FzRW5hYmxl
ZCA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2VyV2FzRW5h
YmxlZCgpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlc1BhbmVs
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZXNQ
YW5lbC5qcwkocmV2aXNpb24gMzk0OTgpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RGF0YWJhc2VzUGFuZWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0NiwyMiBAQAogCiAg
ICAgdGhpcy5zaWRlYmFyVHJlZSA9IG5ldyBUcmVlT3V0bGluZSh0aGlzLnNpZGViYXJUcmVlRWxl
bWVudCk7CiAKLSAgICB0aGlzLmRhdGFiYXNlVmlld3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICB0aGlzLmRhdGFiYXNlVmlld3MuaWQgPSAiZGF0YWJhc2Utdmlld3MiOwot
ICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmRhdGFiYXNlVmlld3MpOworICAgIHRo
aXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyU2Vj
dGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiREFUQUJBU0VTIiksIHt9LCB0
cnVlKTsKKyAgICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuZGF0YWJhc2VzTGlz
dFRyZWVFbGVtZW50KTsKKyAgICB0aGlzLmRhdGFiYXNlc0xpc3RUcmVlRWxlbWVudC5leHBhbmQo
KTsKIAorICAgIHRoaXMubG9jYWxTdG9yYWdlTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3Bl
Y3Rvci5TaWRlYmFyU2VjdGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiTE9D
QUwtU1RPUkFHRSIpLCB7fSwgdHJ1ZSk7CisgICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGls
ZCh0aGlzLmxvY2FsU3RvcmFnZUxpc3RUcmVlRWxlbWVudCk7CisgICAgdGhpcy5sb2NhbFN0b3Jh
Z2VMaXN0VHJlZUVsZW1lbnQuZXhwYW5kKCk7CisKKyAgICB0aGlzLnNlc3Npb25TdG9yYWdlTGlz
dFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyU2VjdGlvblRyZWVFbGVtZW50
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiU0VTU0lPTi1TVE9SQUdFIiksIHt9LCB0cnVlKTsKKyAg
ICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuc2Vzc2lvblN0b3JhZ2VMaXN0VHJl
ZUVsZW1lbnQpOworICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuZXhwYW5k
KCk7CisKKyAgICB0aGlzLnN0b3JhZ2VWaWV3cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgIHRoaXMuc3RvcmFnZVZpZXdzLmlkID0gInN0b3JhZ2Utdmlld3MiOworICAgIHRo
aXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnN0b3JhZ2VWaWV3cyk7CisKICAgICB0aGlzLnJl
c2V0KCk7CiB9CiAKQEAgLTgxLDggKzkzLDIxIEBACiAKICAgICAgICAgdGhpcy5fZGF0YWJhc2Vz
ID0gW107CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyVHJlZS5yZW1vdmVDaGlsZHJlbigpOwotICAg
ICAgICB0aGlzLmRhdGFiYXNlVmlld3MucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKHRo
aXMuX2RvbVN0b3JhZ2UpIHsKKyAgICAgICAgICAgIHZhciBkb21TdG9yYWdlTGVuZ3RoID0gdGhp
cy5fZG9tU3RvcmFnZS5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRv
bVN0b3JhZ2VMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBkb21TdG9yYWdlID0g
dGhpcy5fZG9tU3RvcmFnZVtpXTsKKworICAgICAgICAgICAgICAgIGRlbGV0ZSBkb21TdG9yYWdl
Ll9kb21TdG9yYWdlVmlldzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMuX2RvbVN0b3JhZ2UgPSBbXTsKKworICAgICAgICB0aGlzLmRhdGFiYXNlc0xpc3RUcmVlRWxl
bWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZUxpc3RUcmVl
RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlTGlz
dFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuc3RvcmFnZVZpZXdz
LnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgfSwKIAogICAgIGhhbmRsZUtleUV2ZW50OiBmdW5jdGlv
bihldmVudCkKQEAgLTk2LDggKzEyMSwxOCBAQAogCiAgICAgICAgIHZhciBkYXRhYmFzZVRyZWVF
bGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhYmFzZVNpZGViYXJUcmVlRWxlbWVudChkYXRh
YmFzZSk7CiAgICAgICAgIGRhdGFiYXNlLl9kYXRhYmFzZXNUcmVlRWxlbWVudCA9IGRhdGFiYXNl
VHJlZUVsZW1lbnQ7CisgICAgICAgIHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50LmFwcGVu
ZENoaWxkKGRhdGFiYXNlVHJlZUVsZW1lbnQpOworICAgIH0sCiAKLSAgICAgICAgdGhpcy5zaWRl
YmFyVHJlZS5hcHBlbmRDaGlsZChkYXRhYmFzZVRyZWVFbGVtZW50KTsKKyAgICBhZGREb21TdG9y
YWdlOiBmdW5jdGlvbihkb21TdG9yYWdlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZG9tU3RvcmFn
ZS5wdXNoKGRvbVN0b3JhZ2UpOworICAgICAgICB2YXIgZG9tU3RvcmFnZVRyZWVFbGVtZW50ID0g
bmV3IFdlYkluc3BlY3Rvci5Eb21TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50KGRvbVN0b3JhZ2Up
OworICAgICAgICBkb21TdG9yYWdlLl9kb21TdG9yYWdlVHJlZUVsZW1lbnQgPSBkb21TdG9yYWdl
VHJlZUVsZW1lbnQ7CisgICAgICAgIGlmIChkb21TdG9yYWdlLmlzTG9jYWxTdG9yYWdlKQorICAg
ICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9t
U3RvcmFnZVRyZWVFbGVtZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5zZXNz
aW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChkb21TdG9yYWdlVHJlZUVsZW1l
bnQpOwogICAgIH0sCiAKICAgICBzaG93RGF0YWJhc2U6IGZ1bmN0aW9uKGRhdGFiYXNlLCB0YWJs
ZU5hbWUpCkBAIC0xMDUsOCArMTQwLDggQEAKICAgICAgICAgaWYgKCFkYXRhYmFzZSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAodGhpcy52aXNpYmxlRGF0YWJhc2VWaWV3KQot
ICAgICAgICAgICAgdGhpcy52aXNpYmxlRGF0YWJhc2VWaWV3LmhpZGUoKTsKKyAgICAgICAgaWYg
KHRoaXMudmlzaWJsZVZpZXcpCisgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmhpZGUoKTsK
IAogICAgICAgICB2YXIgdmlldzsKICAgICAgICAgaWYgKHRhYmxlTmFtZSkgewpAQCAtMTI1LDE2
ICsxNjAsMzYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHZpZXcuc2hv
dyh0aGlzLmRhdGFiYXNlVmlld3MpOworICAgICAgICB2aWV3LnNob3codGhpcy5zdG9yYWdlVmll
d3MpOwogCi0gICAgICAgIHRoaXMudmlzaWJsZURhdGFiYXNlVmlldyA9IHZpZXc7CisgICAgICAg
IHRoaXMudmlzaWJsZVZpZXcgPSB2aWV3OwogICAgIH0sCiAKKyAgICBzaG93RG9tU3RvcmFnZTog
ZnVuY3Rpb24oZG9tU3RvcmFnZSkKKyAgICB7CisgICAgICAgIGlmICghZG9tU3RvcmFnZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKKyAgICAg
ICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgpOworCisgICAgICAgIHZhciB2aWV3OworICAg
ICAgICB2aWV3ID0gZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVZpZXc7CisgICAgICAgIGlmICghdmll
dykgeworICAgICAgICAgICAgdmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRG9tU3RvcmFnZUl0ZW1z
Vmlldyhkb21TdG9yYWdlKTsKKyAgICAgICAgICAgIGRvbVN0b3JhZ2UuX2RvbVN0b3JhZ2VWaWV3
ID0gdmlldzsKKyAgICAgICAgfQorCisgICAgICAgIHZpZXcuc2hvdyh0aGlzLnN0b3JhZ2VWaWV3
cyk7CisKKyAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHZpZXc7CisgICAgfSwKKwogICAgIGNs
b3NlVmlzaWJsZVZpZXc6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLnZpc2li
bGVEYXRhYmFzZVZpZXcpCi0gICAgICAgICAgICB0aGlzLnZpc2libGVEYXRhYmFzZVZpZXcuaGlk
ZSgpOwotICAgICAgICBkZWxldGUgdGhpcy52aXNpYmxlRGF0YWJhc2VWaWV3OworICAgICAgICBp
ZiAodGhpcy52aXNpYmxlVmlldykKKyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgp
OworICAgICAgICBkZWxldGUgdGhpcy52aXNpYmxlVmlldzsKICAgICB9LAogCiAgICAgdXBkYXRl
RGF0YWJhc2VUYWJsZXM6IGZ1bmN0aW9uKGRhdGFiYXNlKQpAQCAtMTU1LDcgKzIxMCw3IEBACiAK
ICAgICAgICAgZm9yICh2YXIgdGFibGVOYW1lIGluIGRhdGFiYXNlLl90YWJsZVZpZXdzKSB7CiAg
ICAgICAgICAgICBpZiAoISh0YWJsZU5hbWUgaW4gdGFibGVOYW1lc0hhc2gpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRoaXMudmlzaWJsZURhdGFiYXNlVmlldyA9PT0gZGF0YWJhc2UuX3RhYmxl
Vmlld3NbdGFibGVOYW1lXSkKKyAgICAgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyA9
PT0gZGF0YWJhc2UuX3RhYmxlVmlld3NbdGFibGVOYW1lXSkKICAgICAgICAgICAgICAgICAgICAg
dGhpcy5jbG9zZVZpc2libGVWaWV3KCk7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFiYXNl
Ll90YWJsZVZpZXdzW3RhYmxlTmFtZV07CiAgICAgICAgICAgICB9CkBAIC0yNDEsNiArMjk2LDU5
IEBACiAgICAgICAgIHJldHVybiBkYXRhR3JpZDsKICAgICB9LAogCisgICAgZGF0YUdyaWRGb3JE
b21TdG9yYWdlOiBmdW5jdGlvbihkb21TdG9yYWdlKQorICAgIHsKKyAgICAgICAgaWYgKCFkb21T
dG9yYWdlLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHZhciBj
b2x1bW5zID0ge307CisgICAgICAgIGNvbHVtbnNbMF0gPSB7fTsKKyAgICAgICAgY29sdW1uc1sx
XSA9IHt9OworICAgICAgICBjb2x1bW5zWzBdLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJLZXkiKTsKKyAgICAgICAgY29sdW1uc1swXS53aWR0aCA9IGNvbHVtbnNbMF0udGl0bGUubGVu
Z3RoOworICAgICAgICBjb2x1bW5zWzFdLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJW
YWx1ZSIpOworICAgICAgICBjb2x1bW5zWzFdLndpZHRoID0gY29sdW1uc1swXS50aXRsZS5sZW5n
dGg7CisKKyAgICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICAgIAorICAgICAgICB2YXIgbGVu
Z3RoID0gZG9tU3RvcmFnZS5sZW5ndGg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8
IGRvbVN0b3JhZ2UubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgZGF0YSA9IHt9
OworICAgICAgIAorICAgICAgICAgICAgdmFyIGtleSA9IFN0cmluZyhkb21TdG9yYWdlLmtleShp
bmRleCkpOworICAgICAgICAgICAgZGF0YVswXSA9IGtleTsKKyAgICAgICAgICAgIGlmIChrZXku
bGVuZ3RoID4gY29sdW1uc1swXS53aWR0aCkKKyAgICAgICAgICAgICAgICBjb2x1bW5zWzBdLndp
ZHRoID0ga2V5Lmxlbmd0aDsKKyAgICAgICAgCisgICAgICAgICAgICB2YXIgdmFsdWUgPSBTdHJp
bmcoZG9tU3RvcmFnZS5nZXRJdGVtKGtleSkpOworICAgICAgICAgICAgZGF0YVsxXSA9IHZhbHVl
OworICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IGNvbHVtbnNbMV0ud2lkdGgpCisgICAg
ICAgICAgICAgICAgY29sdW1uc1sxXS53aWR0aCA9IHZhbHVlLmxlbmd0aDsKKyAgICAgICAgICAg
IHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoZGF0YSwgZmFsc2UpOwor
ICAgICAgICAgICAgbm9kZS5zZWxlY3RhYmxlID0gZmFsc2U7CisgICAgICAgICAgICBub2Rlcy5w
dXNoKG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRvdGFsQ29sdW1uV2lkdGhzID0g
Y29sdW1uc1swXS53aWR0aCArIGNvbHVtbnNbMV0ud2lkdGg7CisgICAgICAgIHdpZHRoID0gTWF0
aC5yb3VuZCgoY29sdW1uc1swXS53aWR0aCAqIDEwMCkgLyB0b3RhbENvbHVtbldpZHRocyk7Cisg
ICAgICAgIGNvbnN0IG1pbmltdW1QcmVjZW50ID0gMTA7CisgICAgICAgIGlmICh3aWR0aCA8IG1p
bmltdW1QcmVjZW50KQorICAgICAgICAgICAgd2lkdGggPSBtaW5pbXVtUHJlY2VudDsKKyAgICAg
ICAgaWYgKHdpZHRoID4gMTAwIC0gbWluaW11bVByZWNlbnQpCisgICAgICAgICAgICB3aWR0aCA9
IDEwMCAtIG1pbmltdW1QcmVjZW50OworICAgICAgICBjb2x1bW5zWzBdLndpZHRoID0gd2lkdGg7
CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggPSAxMDAgLSB3aWR0aDsKKyAgICAgICAgY29sdW1u
c1swXS53aWR0aCArPSAiJSI7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggKz0gIiUiOworCisg
ICAgICAgIHZhciBkYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7
CisgICAgICAgIHZhciBsZW5ndGggPSBub2Rlcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkYXRhR3JpZC5hcHBlbmRDaGlsZChu
b2Rlc1tpXSk7CisKKyAgICAgICAgcmV0dXJuIGRhdGFHcmlkOworICAgIH0sCisKICAgICBfc3Rh
cnRTaWRlYmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgV2ViSW5z
cGVjdG9yLmVsZW1lbnREcmFnU3RhcnQodGhpcy5zaWRlYmFyUmVzaXplRWxlbWVudCwgdGhpcy5f
c2lkZWJhckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFNpZGViYXJEcmFnZ2luZy5iaW5k
KHRoaXMpLCBldmVudCwgImNvbC1yZXNpemUiKTsKQEAgLTI3Nyw3ICszODUsNyBAQAogICAgICAg
ICB0aGlzLl9jdXJyZW50U2lkZWJhcldpZHRoID0gd2lkdGg7CiAKICAgICAgICAgdGhpcy5zaWRl
YmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgdGhpcy5kYXRh
YmFzZVZpZXdzLnN0eWxlLmxlZnQgPSB3aWR0aCArICJweCI7CisgICAgICAgIHRoaXMuc3RvcmFn
ZVZpZXdzLnN0eWxlLmxlZnQgPSB3aWR0aCArICJweCI7CiAgICAgICAgIHRoaXMuc2lkZWJhclJl
c2l6ZUVsZW1lbnQuc3R5bGUubGVmdCA9ICh3aWR0aCAtIDMpICsgInB4IjsKICAgICB9CiB9CkBA
IC0zNTUsMyArNDYzLDQyIEBACiB9CiAKIFdlYkluc3BlY3Rvci5TaWRlYmFyRGF0YWJhc2VUYWJs
ZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU2lkZWJhclRy
ZWVFbGVtZW50LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2VTaWRlYmFyVHJl
ZUVsZW1lbnQgPSBmdW5jdGlvbihkb21TdG9yYWdlKQoreworCisgICAgdGhpcy5kb21TdG9yYWdl
ID0gZG9tU3RvcmFnZTsKKworICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQuY2Fs
bCh0aGlzLCAiZG9tc3RvcmFnZS1zaWRlYmFyLXRyZWUtaXRlbSIsIGRvbVN0b3JhZ2UsICIiLCBu
dWxsLCBmYWxzZSk7CisKKyAgICB0aGlzLnJlZnJlc2hUaXRsZXMoKTsKK30KKworV2ViSW5zcGVj
dG9yLkRvbVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlID0geworICAgIG9uc2Vs
ZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmRhdGFi
YXNlcy5zaG93RG9tU3RvcmFnZSh0aGlzLmRvbVN0b3JhZ2UpOworICAgIH0sCisKKyAgICBnZXQg
bWFpblRpdGxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmRvbVN0b3JhZ2UuZG9tYWlu
OworICAgIH0sCisKKyAgICBzZXQgbWFpblRpdGxlKHgpCisgICAgeworICAgICAgICAvLyBEbyBu
b3RoaW5nLgorICAgIH0sCisKKyAgICBnZXQgc3VidGl0bGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICIiOyAvL3RoaXMuZGF0YWJhc2UuZGlzcGxheURvbWFpbjsKKyAgICB9LAorCisgICAgc2V0
IHN1YnRpdGxlKHgpCisgICAgeworICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgIH0KK30KKwor
V2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlOwpJbmRleDog
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RvbVN0b3JhZ2UuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RvbVN0b3JhZ2UuanMJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRG9tU3RvcmFnZS5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rv
ci5Eb21TdG9yYWdlID0gZnVuY3Rpb24oZG9tU3RvcmFnZSwgZG9tYWluLCBpc0xvY2FsU3RvcmFn
ZSkKK3sKKyAgICB0aGlzLmRvbVN0b3JhZ2UgPSBkb21TdG9yYWdlOworICAgIHRoaXMuZG9tYWlu
ID0gZG9tYWluOworICAgIHRoaXMuaXNMb2NhbFN0b3JhZ2UgPSBpc0xvY2FsU3RvcmFnZTsKK30K
KworV2ViSW5zcGVjdG9yLkRvbVN0b3JhZ2UucHJvdG90eXBlID0geworICAgIGdldCBkb21TdG9y
YWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9kb21TdG9yYWdlOworICAgIH0sCisK
KyAgICBzZXQgZG9tU3RvcmFnZSh4KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2RvbVN0b3Jh
Z2UgPT09IHgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2Ug
PSB4OworICAgIH0sCisKKyAgICBnZXQgZG9tYWluKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9kb21haW47CisgICAgfSwKKworICAgIHNldCBkb21haW4oeCkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLl9kb21haW4gPT09IHgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRo
aXMuX2RvbWFpbiA9IHg7CisgICAgfSwKKyAgICAKKyAgICBnZXQgaXNMb2NhbFN0b3JhZ2UoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxTdG9yYWdlOworICAgIH0sCisgICAg
CisgICAgc2V0IGlzTG9jYWxTdG9yYWdlKHgpCisgICAgeworICAgICAgICBpZiAodGhpcy5faXNM
b2NhbFN0b3JhZ2UgPT09IHgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMuX2lz
TG9jYWxTdG9yYWdlID0geDsKKyAgICB9Cit9CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmNzcwkocmV2aXNpb24gMzk0OTgpCisrKyBXZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwkod29ya2luZyBjb3B5KQpAQCAtMTUyOCw3ICsxNTI4
LDExIEBACiAgICAgY29udGVudDogdXJsKEltYWdlcy9kYXRhYmFzZVRhYmxlLnBuZyk7CiB9CiAK
LSNkYXRhYmFzZS12aWV3cyB7CisuZG9tc3RvcmFnZS1zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7
CisgICAgY29udGVudDogdXJsKEltYWdlcy9kb21TdG9yYWdlLnBuZyk7Cit9CisKKyNzdG9yYWdl
LXZpZXdzIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiAwOwogICAgIHJpZ2h0
OiAwOwpAQCAtMTUzNiw3ICsxNTQwLDcgQEAKICAgICBib3R0b206IDA7CiB9CiAKLS5kYXRhYmFz
ZS12aWV3IHsKKy5kYXRhYmFzZS12aWV3LCAuZG9tc3RvcmFnZS12aWV3IHsKICAgICBkaXNwbGF5
OiBub25lOwogICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgcG9zaXRpb246IGFic29sdXRlOwpA
QCAtMTU0NiwyMCArMTU1MCwyMCBAQAogICAgIGJvdHRvbTogMDsKIH0KIAotLmRhdGFiYXNlLXZp
ZXcudmlzaWJsZSB7CisuZGF0YWJhc2Utdmlldy52aXNpYmxlLCAuZG9tc3RvcmFnZS12aWV3LnZp
c2libGUgewogICAgIGRpc3BsYXk6IGJsb2NrOwogfQogCi0uZGF0YWJhc2Utdmlldy50YWJsZSB7
CisuZGF0YWJhc2Utdmlldy50YWJsZSwgLmRvbXN0b3JhZ2Utdmlldy50YWJsZSB7CiAgICAgb3Zl
cmZsb3c6IGhpZGRlbjsKIH0KIAotLmRhdGFiYXNlLXZpZXcudGFibGUgLmRhdGEtZ3JpZCB7Cisu
ZGF0YWJhc2Utdmlldy50YWJsZSAuZGF0YS1ncmlkLCAuZG9tc3RvcmFnZS12aWV3LnRhYmxlIC5k
YXRhLWdyaWQgewogICAgIGJvcmRlcjogbm9uZTsKICAgICBoZWlnaHQ6IDEwMCU7CiB9CiAKLS5k
YXRhYmFzZS12aWV3LnRhYmxlIC5kYXRhYmFzZS10YWJsZS1lbXB0eSwgLmRhdGFiYXNlLXZpZXcu
dGFibGUgLmRhdGFiYXNlLXRhYmxlLWVycm9yIHsKKy5kYXRhYmFzZS12aWV3LnRhYmxlIC5kYXRh
YmFzZS10YWJsZS1lbXB0eSwgLmRhdGFiYXNlLXZpZXcudGFibGUgLmRhdGFiYXNlLXRhYmxlLWVy
cm9yLCAuZG9tc3RvcmFnZS12aWV3LnRhYmxlIC5kb21zdG9yYWdlLXRhYmxlLWVtcHR5LCAuZG9t
c3RvcmFnZS12aWV3LnRhYmxlIC5kb21zdG9yYWdlLXRhYmxlLWVycm9yIHsKICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CiAgICAgdG9wOiAwOwogICAgIGJvdHRvbTogMjUlOwpAQCAtMTU3Nyw3ICsx
NTgxLDcgQEAKICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiB9CiAKLS5kYXRhYmFzZS12aWV3
LnRhYmxlIC5kYXRhYmFzZS10YWJsZS1lcnJvciB7CisuZGF0YWJhc2Utdmlldy50YWJsZSAuZGF0
YWJhc2UtdGFibGUtZXJyb3IsIC5kb21zdG9yYWdlLXZpZXcudGFibGUgLmRvbXN0b3JhZ2UtdGFi
bGUtZXJyb3IgewogICAgIGNvbG9yOiByZ2IoNjYlLCAzMyUsIDMzJSk7CiB9CiAKQEAgLTI0OTQs
NiArMjQ5OCwxMCBAQAogICAgIHBhZGRpbmctbGVmdDogMzdweDsKIH0KIAorLnNpZGViYXItdHJl
ZSA+IC5jaGlsZHJlbiA+IC5jaGlsZHJlbiA+IC5zaWRlYmFyLXRyZWUtaXRlbSB7CisgICAgcGFk
ZGluZy1sZWZ0OiAzN3B4OworfQorCiAuc2lkZWJhci10cmVlLmhpZGUtZGlzY2xvc3VyZS1idXR0
b25zID4gLmNoaWxkcmVuIHsKICAgICBkaXNwbGF5OiBub25lOwogfQpJbmRleDogV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kb21TdG9yYWdlLnBuZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RvbVN0b3JhZ2UucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwkocmV2aXNpb24gMzk0OTgpCisrKyBXZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwkod29ya2luZyBjb3B5KQpAQCAtMTAs
NiArMTAsOCBAQAogICAgIDxmaWxlPkRhdGFiYXNlc1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxl
PkRhdGFiYXNlVGFibGVWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFHcmlkLmpzPC9maWxl
PgorICAgIDxmaWxlPkRvbVN0b3JhZ2UuanM8L2ZpbGU+CisgICAgPGZpbGU+RG9tU3RvcmFnZUl0
ZW1zVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5FbGVtZW50c1BhbmVsLmpzPC9maWxlPgogICAg
IDxmaWxlPkVsZW1lbnRzVHJlZU91dGxpbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+Rm9udFZpZXcu
anM8L2ZpbGU+CkBAIC02Niw2ICs2OCw3IEBACiAgICAgPGZpbGU+SW1hZ2VzL2Rpc2Nsb3N1cmVU
cmlhbmdsZVNtYWxsUmlnaHREb3duV2hpdGUucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9k
aXNjbG9zdXJlVHJpYW5nbGVTbWFsbFJpZ2h0V2hpdGUucG5nPC9maWxlPgogICAgIDxmaWxlPklt
YWdlcy9kb2NrQnV0dG9ucy5wbmc8L2ZpbGU+CisgICAgPGZpbGU+SW1hZ2VzL2RvbVN0b3JhZ2Uu
cG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9lbGVtZW50c0ljb24ucG5nPC9maWxlPgogICAg
IDxmaWxlPkltYWdlcy9lbmFibGVCdXR0b25zLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMv
ZXJyb3JJY29uLnBuZzwvZmlsZT4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmh0bWwJKHJldmlzaW9uIDM5NDk4KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2UuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlQ2F0
ZWdvcnkuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkRhdGFiYXNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJEb21TdG9yYWdlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJEb21TdG9yYWdlSXRlbXNWaWV3LmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEYXRhR3JpZC5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0LmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJCcmVha3Bv
aW50LmpzIj48L3NjcmlwdD4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Eb21T
dG9yYWdlSXRlbXNWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Eb21TdG9yYWdlSXRlbXNWaWV3LmpzCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RvbVN0b3JhZ2VJdGVtc1ZpZXcuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rv
ci5Eb21TdG9yYWdlSXRlbXNWaWV3ID0gZnVuY3Rpb24oZG9tU3RvcmFnZSkKK3sKKyAgICBXZWJJ
bnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOworCisgICAgdGhpcy5kb21TdG9yYWdlID0gZG9tU3Rv
cmFnZTsKKworICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJkb21zdG9yYWdlLXZpZXci
KTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygidGFibGUiKTsKK30KKworV2ViSW5z
cGVjdG9yLkRvbVN0b3JhZ2VJdGVtc1ZpZXcucHJvdG90eXBlID0geworICAgIHNob3c6IGZ1bmN0
aW9uKHBhcmVudEVsZW1lbnQpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90
b3R5cGUuc2hvdy5jYWxsKHRoaXMsIHBhcmVudEVsZW1lbnQpOworICAgICAgICB0aGlzLnVwZGF0
ZSgpOworICAgIH0sCisKKyAgICB1cGRhdGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRo
aXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB2YXIgaGFzRG9tU3RvcmFnZSA9
IHRoaXMuZG9tU3RvcmFnZTsKKyAgICAgICAgaWYgKGhhc0RvbVN0b3JhZ2UpCisgICAgICAgICAg
ICBoYXNEb21TdG9yYWdlID0gdGhpcy5kb21TdG9yYWdlLmRvbVN0b3JhZ2U7CisgICAgICAgIAor
ICAgICAgICBpZiAoaGFzRG9tU3RvcmFnZSkgeworICAgICAgICAgICAgdmFyIGRhdGFHcmlkID0g
V2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMuZGF0YUdyaWRGb3JEb21TdG9yYWdlKHRoaXMu
ZG9tU3RvcmFnZS5kb21TdG9yYWdlKTsKKyAgICAgICAgICAgIGlmICghZGF0YUdyaWQpCisgICAg
ICAgICAgICAgICAgaGFzRG9tU3RvcmFnZSA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRhdGFHcmlkLmVsZW1lbnQpOworICAg
ICAgICB9CisgICAgICAgIGlmICghaGFzRG9tU3RvcmFnZSkgeworICAgICAgICAgICAgdmFyIGVt
cHR5TXNnRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAg
ICAgZW1wdHlNc2dFbGVtZW50LmNsYXNzTmFtZSA9ICJkb21zdG9yYWdlLXRhYmxlLWVtcHR5IjsK
KyAgICAgICAgICAgIGlmICh0aGlzLmRvbVN0b3JhZ2UpCisgICAgICAgICAgICBlbXB0eU1zZ0Vs
ZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoaXMgc3RvcmFnZSBp
cyBlbXB0eS4iKTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlbXB0eU1z
Z0VsZW1lbnQpOworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuRG9tU3RvcmFn
ZUl0ZW1zVmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90
eXBlOwo=
</data>
<flag name="review"
          id="12461"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27321</attachid>
            <date>2009-02-04 11:24:18 -0800</date>
            <delta_ts>2009-02-04 11:31:35 -0800</delta_ts>
            <desc>Addressing comment #7</desc>
            <filename>inspector2.patch</filename>
            <type>text/plain</type>
            <size>35105</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDYxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMDktMDItMDQgIHlhZWwgIDxzZXQgRU1BSUxfQUREUkVTUyBlbnZp
cm9ubWVudCB2YXJpYWJsZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBQYXJ0aWFsIGZpeCBmb3IgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTA1MT4KKyAgICAgICAgSW5jbHVkZSBsb2NhbFN0b3JhZ2UgYW5kIHNlc3Np
b25TdG9yYWdlIGluIERhdGFiYXNlc1BhbmVsLgorICAgICAgICAKKworICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZTo6c2V0U2NyaXB0T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZTo6SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRET01TdG9yYWdlU2NyaXB0UmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlRE9N
U3RvcmFnZVNjcmlwdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OnJlc2V0U2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdl
LmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnByb3RvdHlwZS5nZXQgZG9tU3RvcmFnZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZS5wcm90b3R5cGUuc2V0IGRvbVN0b3JhZ2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UucHJvdG90eXBlLmdldCBkb21haW4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UucHJvdG90eXBlLnNldCBkb21haW4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UucHJvdG90eXBlLmdldCBpc0xvY2FsU3Rv
cmFnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZS5wcm90b3R5cGUuc2V0IGlz
TG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2VJ
dGVtc1ZpZXcuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VJdGVt
c1ZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VJdGVtc1ZpZXcucHJvdG90
eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VJdGVtc1ZpZXcucHJv
dG90eXBlLnVwZGF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1
ZXJ5Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVF1ZXJ5Vmlldyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVRhYmxlVmlldy5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRGF0YWJhc2VUYWJsZVZpZXcucHJvdG90eXBlLl9xdWVyeUZpbmlzaGVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EYXRhYmFzZVRhYmxlVmlldy5wcm90b3R5cGUuX3F1ZXJ5RXJyb3IpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VzUGFuZWwuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRh
dGFiYXNlc1BhbmVsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0
YWJhc2VzUGFuZWwucHJvdG90eXBlLmFkZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuYWRkRE9NU3RvcmFnZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwucHJvdG90eXBlLnNob3dEYXRhYmFzZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwucHJvdG90eXBlLnNob3dET01TdG9yYWdlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuY2xvc2VWaXNp
YmxlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YWJhc2VzUGFuZWwucHJvdG90eXBl
LnVwZGF0ZURhdGFiYXNlVGFibGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhYmFzZXNQ
YW5lbC5wcm90b3R5cGUuZGF0YUdyaWRGb3JET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5EYXRhYmFzZXNQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZVNpZGViYXJXaWR0aCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGUub25z
ZWxlY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1l
bnQucHJvdG90eXBlLmdldCBtYWluVGl0bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0
b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLnNldCBtYWluVGl0bGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLmdl
dCBzdWJ0aXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZVNpZGViYXJUcmVl
RWxlbWVudC5wcm90b3R5cGUuc2V0IHN1YnRpdGxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0ltYWdlcy9kb21TdG9yYWdlLnBuZzogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmNzczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLmFkZERPTVN0b3JhZ2UpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6c2Vzc2lvblN0b3JhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93Ojpsb2NhbFN0b3JhZ2UpOgorCiAyMDA5LTAyLTAyICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHJldmlzaW9uIDQwNTYzKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTY1NzYsNyArMTY1NzYsMTUgQEAKIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXERhdGFHcmlkLmpzIg0KIAkJCQkJPg0KIAkJCQk8
L0ZpbGU+DQotCQkJCTxGaWxlDQorICAgICAgICAgICAgICAgIDxGaWxlDQorICAgICAgICAgICAg
ICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcRE9NU3RvcmFnZS5q
cyINCisgICAgICAgICAgICAgICAgICAgID4NCisgICAgICAgICAgICAgICAgPC9GaWxlPg0KKyAg
ICAgICAgICAgICAgICA8RmlsZQ0KKyAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIu
LlxpbnNwZWN0b3JcZnJvbnQtZW5kXERPTVN0b3JhZ2VJdGVtc1ZpZXcuanMiDQorICAgICAgICAg
ICAgICAgICAgICA+DQorICAgICAgICAgICAgICAgIDwvRmlsZT4NCisgICAgICAgICAgICAgICAg
PEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxFbGVtZW50
c1BhbmVsLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJl
dmlzaW9uIDQwNTYzKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJI
VE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXN0b3J5LmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCiAjaW5jbHVkZSAi
TWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCkBAIC0zMjcsNiArMzI4LDgg
QEAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VB
cmVhID0gcGFnZS0+c2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEoZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlkVXNlRE9N
U3RvcmFnZShzdG9yYWdlQXJlYS5nZXQoKSwgZmFsc2UsIG1fZnJhbWUpOworCiAgICAgbV9zZXNz
aW9uU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShtX2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNl
KCkpOwogICAgIHJldHVybiBtX3Nlc3Npb25TdG9yYWdlLmdldCgpOwogfQpAQCAtMzQ3LDggKzM1
MCwxMCBAQAogCiAgICAgTG9jYWxTdG9yYWdlKiBsb2NhbFN0b3JhZ2UgPSBwYWdlLT5ncm91cCgp
LmxvY2FsU3RvcmFnZSgpOwogICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBs
b2NhbFN0b3JhZ2UgPyBsb2NhbFN0b3JhZ2UtPnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1cml0
eU9yaWdpbigpKSA6IDA7IAotICAgIGlmIChzdG9yYWdlQXJlYSkKKyAgICBpZiAoc3RvcmFnZUFy
ZWEpIHsKKyAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5kaWRVc2VET01TdG9y
YWdlKHN0b3JhZ2VBcmVhLmdldCgpLCB0cnVlLCBtX2ZyYW1lKTsKICAgICAgICAgbV9sb2NhbFN0
b3JhZ2UgPSBTdG9yYWdlOjpjcmVhdGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVsZWFzZSgpKTsK
KyAgICB9CiAKICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CiB9CkluZGV4OiBXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA0MDU2MykKKysrIFdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsNyBAQAogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEluc3BlY3RvckNsaWVu
dDsKIGNsYXNzIEphdmFTY3JpcHRDYWxsRnJhbWU7CitjbGFzcyBTdG9yYWdlQXJlYTsKIGNsYXNz
IE5vZGU7CiBjbGFzcyBQYWdlOwogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwpAQCAtNjcsNiArNjgs
NyBAQAogCiBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2U7CiBzdHJ1Y3QgSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZTsKK3N0cnVjdCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CiBzdHJ1Y3QgSW5z
cGVjdG9yUmVzb3VyY2U7CiAKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXIKQEAgLTc4LDYgKzgw
LDcgQEAKICAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZyBsb25nLCBSZWZQdHI8SW5zcGVjdG9yUmVz
b3VyY2U+ID4gUmVzb3VyY2VzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RnJhbWU+
LCBSZXNvdXJjZXNNYXAqPiBGcmFtZVJlc291cmNlc01hcDsKICAgICB0eXBlZGVmIEhhc2hTZXQ8
UmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNTZXQ7
CisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+
ID4gRE9NU3RvcmFnZVJlc291cmNlc1NldDsKIAogICAgIHR5cGVkZWYgZW51bSB7CiAgICAgICAg
IEN1cnJlbnRQYW5lbCwKQEAgLTIwOSw2ICsyMTIsOSBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICB2b2lkIGRpZE9wZW5EYXRhYmFzZShEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgZG9tYWlu
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAjZW5kaWYKKyNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgdm9pZCBkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VB
cmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKTsKKyNl
bmRpZgogCiAgICAgY29uc3QgUmVzb3VyY2VzTWFwJiByZXNvdXJjZXMoKSBjb25zdCB7IHJldHVy
biBtX3Jlc291cmNlczsgfQogCkBAIC0yNzMsNiArMjc5LDEwIEBACiAgICAgSlNPYmplY3RSZWYg
YWRkRGF0YWJhc2VTY3JpcHRSZXNvdXJjZShJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlKik7CiAg
ICAgdm9pZCByZW1vdmVEYXRhYmFzZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UqKTsKICNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBKU09iamVjdFJl
ZiBhZGRET01TdG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
Kik7CisgICAgdm9pZCByZW1vdmVET01TdG9yYWdlU2NyaXB0UmVzb3VyY2UoSW5zcGVjdG9yRE9N
U3RvcmFnZVJlc291cmNlKik7CisjZW5kaWYKIAogICAgIEpTVmFsdWVSZWYgY2FsbFNpbXBsZUZ1
bmN0aW9uKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lKSBjb25zdDsKICAgICBKU1ZhbHVlUmVmIGNhbGxGdW5jdGlvbihKU0NvbnRl
eHRSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYmIGV4Y2VwdGlvbikgY29uc3Q7CkBAIC0zMDIsNiArMzEyLDkgQEAKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNTZXQgbV9kYXRhYmFzZVJlc291cmNlczsK
ICNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBET01TdG9yYWdlUmVzb3VyY2Vz
U2V0IG1fZG9tU3RvcmFnZVJlc291cmNlczsKKyNlbmRpZgogICAgIEpTT2JqZWN0UmVmIG1fc2Ny
aXB0T2JqZWN0OwogICAgIEpTT2JqZWN0UmVmIG1fY29udHJvbGxlclNjcmlwdE9iamVjdDsKICAg
ICBKU0NvbnRleHRSZWYgbV9zY3JpcHRDb250ZXh0OwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQwNTYzKQorKysgV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1
LDcgQEAKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0
cmluZ1JlZi5oPgpAQCAtODMsNiArODQsMTIgQEAKICNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJTdG9yYWdlLmgiCisj
aW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKKyNlbmRpZgor
CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHREZWJ1Z1NlcnZlci5oIgpAQCAtNDU3LDYg
KzQ2NCw0NCBAQAogfTsKICNlbmRpZgogCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorc3RydWN0
IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZT4geworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZT4gY3JlYXRlKFN0b3JhZ2UqIGRvbVN0b3JhZ2UsIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKGRvbVN0b3JhZ2UsIGlzTG9jYWxTdG9yYWdl
LCBmcmFtZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0U2NyaXB0T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBuZXdTY3JpcHRPYmplY3QpCisgICAgeworICAgICAgICBp
ZiAoc2NyaXB0Q29udGV4dCAmJiBzY3JpcHRPYmplY3QpCisgICAgICAgICAgICBKU1ZhbHVlVW5w
cm90ZWN0KHNjcmlwdENvbnRleHQsIHNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgc2NyaXB0T2Jq
ZWN0ID0gbmV3U2NyaXB0T2JqZWN0OworICAgICAgICBzY3JpcHRDb250ZXh0ID0gY29udGV4dDsK
KworICAgICAgICBBU1NFUlQoKGNvbnRleHQgJiYgbmV3U2NyaXB0T2JqZWN0KSB8fCAoIWNvbnRl
eHQgJiYgIW5ld1NjcmlwdE9iamVjdCkpOworICAgICAgICBpZiAoY29udGV4dCAmJiBuZXdTY3Jp
cHRPYmplY3QpCisgICAgICAgICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRP
YmplY3QpOworICAgIH0KKworICAgIFJlZlB0cjxTdG9yYWdlPiBkb21TdG9yYWdlOworICAgIGJv
b2wgaXNMb2NhbFN0b3JhZ2U7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZTsKKyAgICBKU0NvbnRl
eHRSZWYgc2NyaXB0Q29udGV4dDsKKyAgICBKU09iamVjdFJlZiBzY3JpcHRPYmplY3Q7CisgICAg
Citwcml2YXRlOgorICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZShTdG9yYWdlKiBkb21T
dG9yYWdlLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCisgICAgICAgIDogZG9t
U3RvcmFnZShkb21TdG9yYWdlKQorICAgICAgICAsIGlzTG9jYWxTdG9yYWdlKGlzTG9jYWxTdG9y
YWdlKQorICAgICAgICAsIGZyYW1lKGZyYW1lKQorICAgICAgICAsIHNjcmlwdENvbnRleHQoMCkK
KyAgICAgICAgLCBzY3JpcHRPYmplY3QoMCkKKyAgICB7CisgICAgfQorfTsKKyNlbmRpZgorCiAv
LyBKYXZhU2NyaXB0IENhbGxiYWNrcwogCiAjZGVmaW5lIFNJTVBMRV9JTlNQRUNUT1JfQ0FMTEJB
Q0soanNGdW5jdGlvbiwgaW5zcGVjdG9yQ29udHJvbGxlck1ldGhvZCkgXApAQCAtMjExMCw2ICsy
MTU1LDExIEBACiAgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBt
X2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKICAg
ICAgICAgYWRkRGF0YWJhc2VTY3JpcHRSZXNvdXJjZSgoKml0KS5nZXQoKSk7CiAjZW5kaWYKKyNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgRE9NU3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0
b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5lbmQoKTsKKyAgICBmb3Ig
KERPTVN0b3JhZ2VSZXNvdXJjZXNTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCisgICAgICAgIGFkZERPTVN0
b3JhZ2VTY3JpcHRSZXNvdXJjZShpdC0+Z2V0KCkpOworI2VuZGlmCiAKICAgICBjYWxsU2ltcGxl
RnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInBvcHVsYXRlSW50ZXJm
YWNlIik7CiB9CkBAIC0yMTkxLDYgKzIyNDEsNzggQEAKIH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorSlNPYmplY3RSZWYgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkRE9NU3Rv
cmFnZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogcmVzb3VyY2Up
Cit7CisgICAgQVNTRVJUX0FSRyhyZXNvdXJjZSwgcmVzb3VyY2UpOworCisgICAgaWYgKHJlc291
cmNlLT5zY3JpcHRPYmplY3QpCisgICAgICAgIHJldHVybiByZXNvdXJjZS0+c2NyaXB0T2JqZWN0
OworCisgICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4dCk7CisgICAgQVNTRVJUKG1fc2NyaXB0T2Jq
ZWN0KTsKKyAgICBpZiAoIW1fc2NyaXB0Q29udGV4dCB8fCAhbV9zY3JpcHRPYmplY3QpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOworCisgICAgSlNW
YWx1ZVJlZiBkb21TdG9yYWdlUHJvcGVydHkgPSBKU09iamVjdEdldFByb3BlcnR5KG1fc2NyaXB0
Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsIGpzU3RyaW5nUmVmKCJET01TdG9yYWdlIikuZ2V0KCks
ICZleGNlcHRpb24pOworICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2NyaXB0Q29udGV4dCwg
ZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU09iamVjdFJlZiBkb21TdG9y
YWdlQ29uc3RydWN0b3IgPSBKU1ZhbHVlVG9PYmplY3QobV9zY3JpcHRDb250ZXh0LCBkb21TdG9y
YWdlUHJvcGVydHksICZleGNlcHRpb24pOworICAgIGlmIChIQU5ETEVfRVhDRVBUSU9OKG1fc2Ny
aXB0Q29udGV4dCwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTRE9NV2luZG93KHJlc291cmNlLT5mcmFtZS5nZXQoKSktPmdsb2JhbEV4
ZWMoKTsKKworICAgIEpTVmFsdWVSZWYgZG9tU3RvcmFnZTsKKworICAgIHsKKyAgICAgICAgSlND
OjpKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAgIGRvbVN0b3JhZ2UgPSB0b1JlZihKU0luc3Bl
Y3RlZE9iamVjdFdyYXBwZXI6OndyYXAoZXhlYywgdG9KUyhleGVjLCByZXNvdXJjZS0+ZG9tU3Rv
cmFnZS5nZXQoKSkpKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlUmVmIGRvbWFpblZhbHVlID0gSlNW
YWx1ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihyZXNvdXJjZS0+ZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmRvbWFpbigpKS5nZXQoKSk7CisgICAg
SlNWYWx1ZVJlZiBpc0xvY2FsU3RvcmFnZVZhbHVlID0gSlNWYWx1ZU1ha2VCb29sZWFuKG1fc2Ny
aXB0Q29udGV4dCwgcmVzb3VyY2UtPmlzTG9jYWxTdG9yYWdlKTsKKworICAgIEpTVmFsdWVSZWYg
YXJndW1lbnRzW10gPSB7IGRvbVN0b3JhZ2UsIGRvbWFpblZhbHVlLCBpc0xvY2FsU3RvcmFnZVZh
bHVlIH07CisgICAgSlNPYmplY3RSZWYgcmVzdWx0ID0gSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3Rv
cihtX3NjcmlwdENvbnRleHQsIGRvbVN0b3JhZ2VDb25zdHJ1Y3RvciwgMywgYXJndW1lbnRzLCAm
ZXhjZXB0aW9uKTsKKyAgICBpZiAoSEFORExFX0VYQ0VQVElPTihtX3NjcmlwdENvbnRleHQsIGV4
Y2VwdGlvbikpCisgICAgICAgIHJldHVybiAwOworCisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAg
ICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgImFkZERPTVN0
b3JhZ2UiLCAxLCAmcmVzdWx0LCBleGNlcHRpb24pOworCisgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXNvdXJjZS0+c2V0U2NyaXB0T2JqZWN0KG1fc2NyaXB0
Q29udGV4dCwgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVtb3ZlRE9NU3RvcmFnZVNjcmlwdFJlc291cmNlKEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgQVNTRVJUKG1fc2NyaXB0Q29udGV4
dCk7CisgICAgQVNTRVJUKG1fc2NyaXB0T2JqZWN0KTsKKyAgICBpZiAoIW1fc2NyaXB0Q29udGV4
dCB8fCAhbV9zY3JpcHRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChyZXNv
dXJjZSk7CisgICAgQVNTRVJUKHJlc291cmNlLT5zY3JpcHRPYmplY3QpOworICAgIGlmICghcmVz
b3VyY2UgfHwgIXJlc291cmNlLT5zY3JpcHRPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAg
IEpTT2JqZWN0UmVmIHNjcmlwdE9iamVjdCA9IHJlc291cmNlLT5zY3JpcHRPYmplY3Q7CisgICAg
cmVzb3VyY2UtPnNldFNjcmlwdE9iamVjdCgwLCAwKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0
aW9uID0gMDsKKyAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVj
dCwgInJlbW92ZURPTVN0b3JhZ2UiLCAxLCAmc2NyaXB0T2JqZWN0LCBleGNlcHRpb24pOworfQor
I2VuZGlmCisKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0Q29uc29sZU1lc3Nh
Z2UoY29uc3QgQ29uc29sZU1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUX0FSRyhtZXNz
YWdlLCBtZXNzYWdlKTsKQEAgLTIyNzAsNiArMjM5MiwxMyBAQAogICAgICAgICByZXNvdXJjZS0+
c2V0U2NyaXB0T2JqZWN0KDAsIDApOwogICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBkb21TdG9yYWdlRW5k
ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgeworICAgICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UqIHJlc291cmNlID0gaXQtPmdldCgpOworICAgICAgICByZXNvdXJjZS0+c2V0U2NyaXB0
T2JqZWN0KDAsIDApOworICAgIH0KKyNlbmRpZgogCiAgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKG1f
c2NyaXB0Q29udGV4dCwgbV9zY3JpcHRPYmplY3QsICJyZXNldCIpOwogfQpAQCAtMjMxMiw2ICsy
NDQxLDkgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIG1fZGF0YWJhc2VSZXNvdXJj
ZXMuY2xlYXIoKTsKICNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICAgICAgbV9k
b21TdG9yYWdlUmVzb3VyY2VzLmNsZWFyKCk7CisjZW5kaWYKIAogICAgICAgICBpZiAod2luZG93
VmlzaWJsZSgpKSB7CiAgICAgICAgICAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKQEAgLTI1NzEs
NiArMjcwMywyNyBAQAogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCit2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3Jh
Z2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFl
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnQgbGVuZ3RoID0gbV9kb21TdG9yYWdl
UmVzb3VyY2VzLnNpemUoKTsKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBk
b21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoRE9N
U3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMu
YmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgeworICAgICAgICBJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPmdldCgpOworICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UocmVzb3VyY2UtPmZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5kb21haW4oKSwgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmRvbWFp
bigpKSAmJiByZXNvdXJjZS0+aXNMb2NhbFN0b3JhZ2UgPT0gaXNMb2NhbFN0b3JhZ2UpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxTdG9yYWdlPiBkb21TdG9yYWdlID0g
U3RvcmFnZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3Vy
Y2U6OmNyZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpOworCisg
ICAgbV9kb21TdG9yYWdlUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisgICAgaWYgKHdpbmRvd1Zp
c2libGUoKSkKKyAgICAgICAgYWRkRE9NU3RvcmFnZVNjcmlwdFJlc291cmNlKHJlc291cmNlLmdl
dCgpKTsKK30KKyNlbmRpZgorCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdmVXaW5kb3dC
eShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogewogICAgIGlmICghbV9wYWdlIHx8ICFlbmFibGVk
KCkpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMJKHJldmlz
aW9uIDQwNTYzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwko
d29ya2luZyBjb3B5KQpAQCAtNzk1LDYgKzc5NSwxMSBAQAogICAgIHRoaXMucGFuZWxzLmRhdGFi
YXNlcy5hZGREYXRhYmFzZShkYXRhYmFzZSk7CiB9CiAKK1dlYkluc3BlY3Rvci5hZGRET01TdG9y
YWdlID0gZnVuY3Rpb24oZG9tU3RvcmFnZSkKK3sKKyAgICB0aGlzLnBhbmVscy5kYXRhYmFzZXMu
YWRkRE9NU3RvcmFnZShkb21TdG9yYWdlKTsKK30KKwogV2ViSW5zcGVjdG9yLmRlYnVnZ2VyV2Fz
RW5hYmxlZCA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlzLnBhbmVscy5zY3JpcHRzLmRlYnVnZ2Vy
V2FzRW5hYmxlZCgpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNl
c1BhbmVsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRh
YmFzZXNQYW5lbC5qcwkocmV2aXNpb24gNDA1NjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGF0YWJhc2VzUGFuZWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0NiwyMiBA
QAogCiAgICAgdGhpcy5zaWRlYmFyVHJlZSA9IG5ldyBUcmVlT3V0bGluZSh0aGlzLnNpZGViYXJU
cmVlRWxlbWVudCk7CiAKLSAgICB0aGlzLmRhdGFiYXNlVmlld3MgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmRhdGFiYXNlVmlld3MuaWQgPSAiZGF0YWJhc2Utdmll
d3MiOwotICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmRhdGFiYXNlVmlld3MpOwor
ICAgIHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRl
YmFyU2VjdGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiREFUQUJBU0VTIiks
IHt9LCB0cnVlKTsKKyAgICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuZGF0YWJh
c2VzTGlzdFRyZWVFbGVtZW50KTsKKyAgICB0aGlzLmRhdGFiYXNlc0xpc3RUcmVlRWxlbWVudC5l
eHBhbmQoKTsKIAorICAgIHRoaXMubG9jYWxTdG9yYWdlTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdl
Ykluc3BlY3Rvci5TaWRlYmFyU2VjdGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiTE9DQUwgU1RPUkFHRSIpLCB7fSwgdHJ1ZSk7CisgICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBl
bmRDaGlsZCh0aGlzLmxvY2FsU3RvcmFnZUxpc3RUcmVlRWxlbWVudCk7CisgICAgdGhpcy5sb2Nh
bFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuZXhwYW5kKCk7CisKKyAgICB0aGlzLnNlc3Npb25TdG9y
YWdlTGlzdFRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyU2VjdGlvblRyZWVF
bGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiU0VTU0lPTiBTVE9SQUdFIiksIHt9LCB0cnVl
KTsKKyAgICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuc2Vzc2lvblN0b3JhZ2VM
aXN0VHJlZUVsZW1lbnQpOworICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQu
ZXhwYW5kKCk7CisKKyAgICB0aGlzLnN0b3JhZ2VWaWV3cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgIHRoaXMuc3RvcmFnZVZpZXdzLmlkID0gInN0b3JhZ2Utdmlld3MiOwor
ICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnN0b3JhZ2VWaWV3cyk7CisKICAgICB0
aGlzLnJlc2V0KCk7CiB9CiAKQEAgLTgxLDggKzkzLDIxIEBACiAKICAgICAgICAgdGhpcy5fZGF0
YWJhc2VzID0gW107CiAKLSAgICAgICAgdGhpcy5zaWRlYmFyVHJlZS5yZW1vdmVDaGlsZHJlbigp
OwotICAgICAgICB0aGlzLmRhdGFiYXNlVmlld3MucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAg
aWYgKHRoaXMuX2RvbVN0b3JhZ2UpIHsKKyAgICAgICAgICAgIHZhciBkb21TdG9yYWdlTGVuZ3Ro
ID0gdGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGRvbVN0b3JhZ2VMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBkb21TdG9y
YWdlID0gdGhpcy5fZG9tU3RvcmFnZVtpXTsKKworICAgICAgICAgICAgICAgIGRlbGV0ZSBkb21T
dG9yYWdlLl9kb21TdG9yYWdlVmlldzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuX2RvbVN0b3JhZ2UgPSBbXTsKKworICAgICAgICB0aGlzLmRhdGFiYXNlc0xpc3RU
cmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZUxp
c3RUcmVlRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLnNlc3Npb25TdG9y
YWdlTGlzdFRyZWVFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuc3RvcmFn
ZVZpZXdzLnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgfSwKIAogICAgIGhhbmRsZUtleUV2ZW50OiBm
dW5jdGlvbihldmVudCkKQEAgLTk2LDggKzEyMSwxOCBAQAogCiAgICAgICAgIHZhciBkYXRhYmFz
ZVRyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhYmFzZVNpZGViYXJUcmVlRWxlbWVu
dChkYXRhYmFzZSk7CiAgICAgICAgIGRhdGFiYXNlLl9kYXRhYmFzZXNUcmVlRWxlbWVudCA9IGRh
dGFiYXNlVHJlZUVsZW1lbnQ7CisgICAgICAgIHRoaXMuZGF0YWJhc2VzTGlzdFRyZWVFbGVtZW50
LmFwcGVuZENoaWxkKGRhdGFiYXNlVHJlZUVsZW1lbnQpOworICAgIH0sCiAKLSAgICAgICAgdGhp
cy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZChkYXRhYmFzZVRyZWVFbGVtZW50KTsKKyAgICBhZGRE
T01TdG9yYWdlOiBmdW5jdGlvbihkb21TdG9yYWdlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZG9t
U3RvcmFnZS5wdXNoKGRvbVN0b3JhZ2UpOworICAgICAgICB2YXIgZG9tU3RvcmFnZVRyZWVFbGVt
ZW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01TdG9yYWdlU2lkZWJhclRyZWVFbGVtZW50KGRvbVN0
b3JhZ2UpOworICAgICAgICBkb21TdG9yYWdlLl9kb21TdG9yYWdlVHJlZUVsZW1lbnQgPSBkb21T
dG9yYWdlVHJlZUVsZW1lbnQ7CisgICAgICAgIGlmIChkb21TdG9yYWdlLmlzTG9jYWxTdG9yYWdl
KQorICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VMaXN0VHJlZUVsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9tU3RvcmFnZVRyZWVFbGVtZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhp
cy5zZXNzaW9uU3RvcmFnZUxpc3RUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChkb21TdG9yYWdlVHJl
ZUVsZW1lbnQpOwogICAgIH0sCiAKICAgICBzaG93RGF0YWJhc2U6IGZ1bmN0aW9uKGRhdGFiYXNl
LCB0YWJsZU5hbWUpCkBAIC0xMDUsOCArMTQwLDggQEAKICAgICAgICAgaWYgKCFkYXRhYmFzZSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAodGhpcy52aXNpYmxlRGF0YWJhc2VW
aWV3KQotICAgICAgICAgICAgdGhpcy52aXNpYmxlRGF0YWJhc2VWaWV3LmhpZGUoKTsKKyAgICAg
ICAgaWYgKHRoaXMudmlzaWJsZVZpZXcpCisgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3Lmhp
ZGUoKTsKIAogICAgICAgICB2YXIgdmlldzsKICAgICAgICAgaWYgKHRhYmxlTmFtZSkgewpAQCAt
MTI1LDE2ICsxNjAsMzYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHZp
ZXcuc2hvdyh0aGlzLmRhdGFiYXNlVmlld3MpOworICAgICAgICB2aWV3LnNob3codGhpcy5zdG9y
YWdlVmlld3MpOwogCi0gICAgICAgIHRoaXMudmlzaWJsZURhdGFiYXNlVmlldyA9IHZpZXc7Cisg
ICAgICAgIHRoaXMudmlzaWJsZVZpZXcgPSB2aWV3OwogICAgIH0sCiAKKyAgICBzaG93RE9NU3Rv
cmFnZTogZnVuY3Rpb24oZG9tU3RvcmFnZSkKKyAgICB7CisgICAgICAgIGlmICghZG9tU3RvcmFn
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykK
KyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgpOworCisgICAgICAgIHZhciB2aWV3
OworICAgICAgICB2aWV3ID0gZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVZpZXc7CisgICAgICAgIGlm
ICghdmlldykgeworICAgICAgICAgICAgdmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NU3RvcmFn
ZUl0ZW1zVmlldyhkb21TdG9yYWdlKTsKKyAgICAgICAgICAgIGRvbVN0b3JhZ2UuX2RvbVN0b3Jh
Z2VWaWV3ID0gdmlldzsKKyAgICAgICAgfQorCisgICAgICAgIHZpZXcuc2hvdyh0aGlzLnN0b3Jh
Z2VWaWV3cyk7CisKKyAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IHZpZXc7CisgICAgfSwKKwog
ICAgIGNsb3NlVmlzaWJsZVZpZXc6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlz
LnZpc2libGVEYXRhYmFzZVZpZXcpCi0gICAgICAgICAgICB0aGlzLnZpc2libGVEYXRhYmFzZVZp
ZXcuaGlkZSgpOwotICAgICAgICBkZWxldGUgdGhpcy52aXNpYmxlRGF0YWJhc2VWaWV3OworICAg
ICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKKyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcu
aGlkZSgpOworICAgICAgICBkZWxldGUgdGhpcy52aXNpYmxlVmlldzsKICAgICB9LAogCiAgICAg
dXBkYXRlRGF0YWJhc2VUYWJsZXM6IGZ1bmN0aW9uKGRhdGFiYXNlKQpAQCAtMTU1LDcgKzIxMCw3
IEBACiAKICAgICAgICAgZm9yICh2YXIgdGFibGVOYW1lIGluIGRhdGFiYXNlLl90YWJsZVZpZXdz
KSB7CiAgICAgICAgICAgICBpZiAoISh0YWJsZU5hbWUgaW4gdGFibGVOYW1lc0hhc2gpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZURhdGFiYXNlVmlldyA9PT0gZGF0YWJhc2Uu
X3RhYmxlVmlld3NbdGFibGVOYW1lXSkKKyAgICAgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxl
VmlldyA9PT0gZGF0YWJhc2UuX3RhYmxlVmlld3NbdGFibGVOYW1lXSkKICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jbG9zZVZpc2libGVWaWV3KCk7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGRh
dGFiYXNlLl90YWJsZVZpZXdzW3RhYmxlTmFtZV07CiAgICAgICAgICAgICB9CkBAIC0yNDEsNiAr
Mjk2LDU5IEBACiAgICAgICAgIHJldHVybiBkYXRhR3JpZDsKICAgICB9LAogCisgICAgZGF0YUdy
aWRGb3JET01TdG9yYWdlOiBmdW5jdGlvbihkb21TdG9yYWdlKQorICAgIHsKKyAgICAgICAgaWYg
KCFkb21TdG9yYWdlLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAg
IHZhciBjb2x1bW5zID0ge307CisgICAgICAgIGNvbHVtbnNbMF0gPSB7fTsKKyAgICAgICAgY29s
dW1uc1sxXSA9IHt9OworICAgICAgICBjb2x1bW5zWzBdLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJLZXkiKTsKKyAgICAgICAgY29sdW1uc1swXS53aWR0aCA9IGNvbHVtbnNbMF0udGl0
bGUubGVuZ3RoOworICAgICAgICBjb2x1bW5zWzFdLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJWYWx1ZSIpOworICAgICAgICBjb2x1bW5zWzFdLndpZHRoID0gY29sdW1uc1swXS50aXRs
ZS5sZW5ndGg7CisKKyAgICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICAgIAorICAgICAgICB2
YXIgbGVuZ3RoID0gZG9tU3RvcmFnZS5sZW5ndGg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBp
bmRleCA8IGRvbVN0b3JhZ2UubGVuZ3RoOyBpbmRleCsrKSB7CisgICAgICAgICAgICB2YXIgZGF0
YSA9IHt9OworICAgICAgIAorICAgICAgICAgICAgdmFyIGtleSA9IFN0cmluZyhkb21TdG9yYWdl
LmtleShpbmRleCkpOworICAgICAgICAgICAgZGF0YVswXSA9IGtleTsKKyAgICAgICAgICAgIGlm
IChrZXkubGVuZ3RoID4gY29sdW1uc1swXS53aWR0aCkKKyAgICAgICAgICAgICAgICBjb2x1bW5z
WzBdLndpZHRoID0ga2V5Lmxlbmd0aDsKKyAgICAgICAgCisgICAgICAgICAgICB2YXIgdmFsdWUg
PSBTdHJpbmcoZG9tU3RvcmFnZS5nZXRJdGVtKGtleSkpOworICAgICAgICAgICAgZGF0YVsxXSA9
IHZhbHVlOworICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IGNvbHVtbnNbMV0ud2lkdGgp
CisgICAgICAgICAgICAgICAgY29sdW1uc1sxXS53aWR0aCA9IHZhbHVlLmxlbmd0aDsKKyAgICAg
ICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUoZGF0YSwgZmFs
c2UpOworICAgICAgICAgICAgbm9kZS5zZWxlY3RhYmxlID0gZmFsc2U7CisgICAgICAgICAgICBu
b2Rlcy5wdXNoKG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRvdGFsQ29sdW1uV2lk
dGhzID0gY29sdW1uc1swXS53aWR0aCArIGNvbHVtbnNbMV0ud2lkdGg7CisgICAgICAgIHdpZHRo
ID0gTWF0aC5yb3VuZCgoY29sdW1uc1swXS53aWR0aCAqIDEwMCkgLyB0b3RhbENvbHVtbldpZHRo
cyk7CisgICAgICAgIGNvbnN0IG1pbmltdW1QcmVjZW50ID0gMTA7CisgICAgICAgIGlmICh3aWR0
aCA8IG1pbmltdW1QcmVjZW50KQorICAgICAgICAgICAgd2lkdGggPSBtaW5pbXVtUHJlY2VudDsK
KyAgICAgICAgaWYgKHdpZHRoID4gMTAwIC0gbWluaW11bVByZWNlbnQpCisgICAgICAgICAgICB3
aWR0aCA9IDEwMCAtIG1pbmltdW1QcmVjZW50OworICAgICAgICBjb2x1bW5zWzBdLndpZHRoID0g
d2lkdGg7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggPSAxMDAgLSB3aWR0aDsKKyAgICAgICAg
Y29sdW1uc1swXS53aWR0aCArPSAiJSI7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggKz0gIiUi
OworCisgICAgICAgIHZhciBkYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29s
dW1ucyk7CisgICAgICAgIHZhciBsZW5ndGggPSBub2Rlcy5sZW5ndGg7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkYXRhR3JpZC5hcHBlbmRD
aGlsZChub2Rlc1tpXSk7CisKKyAgICAgICAgcmV0dXJuIGRhdGFHcmlkOworICAgIH0sCisKICAg
ICBfc3RhcnRTaWRlYmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAg
V2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQodGhpcy5zaWRlYmFyUmVzaXplRWxlbWVudCwg
dGhpcy5fc2lkZWJhckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFNpZGViYXJEcmFnZ2lu
Zy5iaW5kKHRoaXMpLCBldmVudCwgImNvbC1yZXNpemUiKTsKQEAgLTI3Nyw3ICszODUsNyBAQAog
ICAgICAgICB0aGlzLl9jdXJyZW50U2lkZWJhcldpZHRoID0gd2lkdGg7CiAKICAgICAgICAgdGhp
cy5zaWRlYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgdGhp
cy5kYXRhYmFzZVZpZXdzLnN0eWxlLmxlZnQgPSB3aWR0aCArICJweCI7CisgICAgICAgIHRoaXMu
c3RvcmFnZVZpZXdzLnN0eWxlLmxlZnQgPSB3aWR0aCArICJweCI7CiAgICAgICAgIHRoaXMuc2lk
ZWJhclJlc2l6ZUVsZW1lbnQuc3R5bGUubGVmdCA9ICh3aWR0aCAtIDMpICsgInB4IjsKICAgICB9
CiB9CkBAIC0zNTUsMyArNDYzLDQyIEBACiB9CiAKIFdlYkluc3BlY3Rvci5TaWRlYmFyRGF0YWJh
c2VUYWJsZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU2lk
ZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VTaWRl
YmFyVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihkb21TdG9yYWdlKQoreworCisgICAgdGhpcy5kb21T
dG9yYWdlID0gZG9tU3RvcmFnZTsKKworICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1l
bnQuY2FsbCh0aGlzLCAiZG9tc3RvcmFnZS1zaWRlYmFyLXRyZWUtaXRlbSIsIGRvbVN0b3JhZ2Us
ICIiLCBudWxsLCBmYWxzZSk7CisKKyAgICB0aGlzLnJlZnJlc2hUaXRsZXMoKTsKK30KKworV2Vi
SW5zcGVjdG9yLkRPTVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlID0geworICAg
IG9uc2VsZWN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxz
LmRhdGFiYXNlcy5zaG93RE9NU3RvcmFnZSh0aGlzLmRvbVN0b3JhZ2UpOworICAgIH0sCisKKyAg
ICBnZXQgbWFpblRpdGxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmRvbVN0b3JhZ2Uu
ZG9tYWluOworICAgIH0sCisKKyAgICBzZXQgbWFpblRpdGxlKHgpCisgICAgeworICAgICAgICAv
LyBEbyBub3RoaW5nLgorICAgIH0sCisKKyAgICBnZXQgc3VidGl0bGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICIiOyAvL3RoaXMuZGF0YWJhc2UuZGlzcGxheURvbWFpbjsKKyAgICB9LAorCisg
ICAgc2V0IHN1YnRpdGxlKHgpCisgICAgeworICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgIH0K
K30KKworV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlOwpJ
bmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlUXVlcnlWaWV3LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVF1ZXJ5Vmll
dy5qcwkocmV2aXNpb24gNDA1NjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0
YWJhc2VRdWVyeVZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogICAg
IHRoaXMuZGF0YWJhc2UgPSBkYXRhYmFzZTsKIAotICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJkYXRhYmFzZS12aWV3Iik7CisgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInN0
b3JhZ2UtdmlldyIpOwogICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJxdWVyeSIpOwog
ICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9ET01TdG9yYWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9ET01TdG9yYWdlLmpzCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2UuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZSA9IGZ1
bmN0aW9uKGRvbVN0b3JhZ2UsIGRvbWFpbiwgaXNMb2NhbFN0b3JhZ2UpCit7CisgICAgdGhpcy5k
b21TdG9yYWdlID0gZG9tU3RvcmFnZTsKKyAgICB0aGlzLmRvbWFpbiA9IGRvbWFpbjsKKyAgICB0
aGlzLmlzTG9jYWxTdG9yYWdlID0gaXNMb2NhbFN0b3JhZ2U7Cit9CisKK1dlYkluc3BlY3Rvci5E
T01TdG9yYWdlLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgZG9tU3RvcmFnZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fZG9tU3RvcmFnZTsKKyAgICB9LAorCisgICAgc2V0IGRvbVN0b3Jh
Z2UoeCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9kb21TdG9yYWdlID09PSB4KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9kb21TdG9yYWdlID0geDsKKyAgICB9LAorCisg
ICAgZ2V0IGRvbWFpbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZG9tYWluOworICAg
IH0sCisKKyAgICBzZXQgZG9tYWluKHgpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZG9tYWlu
ID09PSB4KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9kb21haW4gPSB4Owor
ICAgIH0sCisgICAgCisgICAgZ2V0IGlzTG9jYWxTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9pc0xvY2FsU3RvcmFnZTsKKyAgICB9LAorICAgIAorICAgIHNldCBpc0xvY2Fs
U3RvcmFnZSh4KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzTG9jYWxTdG9yYWdlID09PSB4
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLl9pc0xvY2FsU3RvcmFnZSA9IHg7
CisgICAgfQorfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlVGFi
bGVWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRh
YmFzZVRhYmxlVmlldy5qcwkocmV2aXNpb24gNDA1NjMpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRGF0YWJhc2VUYWJsZVZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAKICAgICB0aGlzLmRhdGFiYXNlID0gZGF0YWJhc2U7CiAgICAgdGhpcy50YWJsZU5hbWUg
PSB0YWJsZU5hbWU7CiAKLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZGF0YWJhc2Ut
dmlldyIpOworICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzdG9yYWdlLXZpZXciKTsK
ICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygidGFibGUiKTsKIH0KIApAQCAtNTgsNyAr
NTgsNyBAQAogICAgICAgICB2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmRhdGFi
YXNlcy5kYXRhR3JpZEZvclJlc3VsdChyZXN1bHQpOwogICAgICAgICBpZiAoIWRhdGFHcmlkKSB7
CiAgICAgICAgICAgICB2YXIgZW1wdHlNc2dFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7Ci0gICAgICAgICAgICBlbXB0eU1zZ0VsZW1lbnQuY2xhc3NOYW1lID0gImRhdGFi
YXNlLXRhYmxlLWVtcHR5IjsKKyAgICAgICAgICAgIGVtcHR5TXNnRWxlbWVudC5jbGFzc05hbWUg
PSAic3RvcmFnZS10YWJsZS1lbXB0eSI7CiAgICAgICAgICAgICBlbXB0eU1zZ0VsZW1lbnQudGV4
dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoZSDigJwlc+KAnVxudGFibGUgaXMg
ZW1wdHkuIiwgdGhpcy50YWJsZU5hbWUpOwogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKGVtcHR5TXNnRWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03Miw3ICs3
Miw3IEBACiAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwogCiAgICAgICAg
IHZhciBlcnJvck1zZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAg
ICAgICAgZXJyb3JNc2dFbGVtZW50LmNsYXNzTmFtZSA9ICJkYXRhYmFzZS10YWJsZS1lcnJvciI7
CisgICAgICAgIGVycm9yTXNnRWxlbWVudC5jbGFzc05hbWUgPSAic3RvcmFnZS10YWJsZS1lcnJv
ciI7CiAgICAgICAgIGVycm9yTXNnRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQW4gZXJyb3Igb2NjdXJyZWQgdHJ5aW5nIHRvXG5yZWFkIHRoZSDigJwlc+KAnSB0
YWJsZS4iLCB0aGlzLnRhYmxlTmFtZSk7CiAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGls
ZChlcnJvck1zZ0VsZW1lbnQpOwogICAgIH0sCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmNzcwkocmV2aXNpb24gNDA1NjMpCisrKyBXZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwkod29ya2luZyBjb3B5KQpAQCAtMTUzMiw3ICsxNTMy
LDExIEBACiAgICAgY29udGVudDogdXJsKEltYWdlcy9kYXRhYmFzZVRhYmxlLnBuZyk7CiB9CiAK
LSNkYXRhYmFzZS12aWV3cyB7CisuZG9tc3RvcmFnZS1zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7
CisgICAgY29udGVudDogdXJsKEltYWdlcy9kb21TdG9yYWdlLnBuZyk7Cit9CisKKyNzdG9yYWdl
LXZpZXdzIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiAwOwogICAgIHJpZ2h0
OiAwOwpAQCAtMTU0MCw3ICsxNTQ0LDcgQEAKICAgICBib3R0b206IDA7CiB9CiAKLS5kYXRhYmFz
ZS12aWV3IHsKKy5zdG9yYWdlLXZpZXcgewogICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CkBAIC0xNTUwLDIwICsxNTU0LDIw
IEBACiAgICAgYm90dG9tOiAwOwogfQogCi0uZGF0YWJhc2Utdmlldy52aXNpYmxlIHsKKy5zdG9y
YWdlLXZpZXcudmlzaWJsZSB7CiAgICAgZGlzcGxheTogYmxvY2s7CiB9CiAKLS5kYXRhYmFzZS12
aWV3LnRhYmxlIHsKKy5zdG9yYWdlLXZpZXcudGFibGUgewogICAgIG92ZXJmbG93OiBoaWRkZW47
CiB9CiAKLS5kYXRhYmFzZS12aWV3LnRhYmxlIC5kYXRhLWdyaWQgeworLnN0b3JhZ2Utdmlldy50
YWJsZSAuZGF0YS1ncmlkIHsKICAgICBib3JkZXI6IG5vbmU7CiAgICAgaGVpZ2h0OiAxMDAlOwog
fQogCi0uZGF0YWJhc2Utdmlldy50YWJsZSAuZGF0YWJhc2UtdGFibGUtZW1wdHksIC5kYXRhYmFz
ZS12aWV3LnRhYmxlIC5kYXRhYmFzZS10YWJsZS1lcnJvciB7Cisuc3RvcmFnZS12aWV3LnRhYmxl
IC5zdG9yYWdlLXRhYmxlLWVtcHR5LCAuc3RvcmFnZS12aWV3LnRhYmxlIC5zdG9yYWdlLXRhYmxl
LWVycm9yIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiAwOwogICAgIGJvdHRv
bTogMjUlOwpAQCAtMTU4MSw3ICsxNTg1LDcgQEAKICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7
CiB9CiAKLS5kYXRhYmFzZS12aWV3LnRhYmxlIC5kYXRhYmFzZS10YWJsZS1lcnJvciB7Cisuc3Rv
cmFnZS12aWV3LnRhYmxlIC5zdG9yYWdlLXRhYmxlLWVycm9yIHsKICAgICBjb2xvcjogcmdiKDY2
JSwgMzMlLCAzMyUpOwogfQogCkBAIC0xNzczLDcgKzE3NzcsNyBAQAogICAgIHRleHQtaW5kZW50
OiAxMHB4OwogfQogCi0uZGF0YWJhc2Utdmlldy5xdWVyeSB7Cisuc3RvcmFnZS12aWV3LnF1ZXJ5
IHsKICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgZm9udC1mYW1pbHk6IE1vbmFjbywgTHVjaWRh
IENvbnNvbGUsIG1vbm9zcGFjZTsKICAgICBwYWRkaW5nOiAycHggMDsKQEAgLTI0OTgsNiArMjUw
MiwxMCBAQAogICAgIHBhZGRpbmctbGVmdDogMzdweDsKIH0KIAorLnNpZGViYXItdHJlZSA+IC5j
aGlsZHJlbiA+IC5jaGlsZHJlbiA+IC5zaWRlYmFyLXRyZWUtaXRlbSB7CisgICAgcGFkZGluZy1s
ZWZ0OiAzN3B4OworfQorCiAuc2lkZWJhci10cmVlLmhpZGUtZGlzY2xvc3VyZS1idXR0b25zID4g
LmNoaWxkcmVuIHsKICAgICBkaXNwbGF5OiBub25lOwogfQpJbmRleDogV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0ltYWdlcy9kb21TdG9yYWdlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW1hZ2VzL2RvbVN0b3JhZ2UucG5nCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpt
aW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwkocmV2aXNpb24gNDA1NjMpCisrKyBXZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwkod29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAs
OCBAQAogICAgIDxmaWxlPkRhdGFiYXNlc1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFi
YXNlVGFibGVWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFHcmlkLmpzPC9maWxlPgorICAg
IDxmaWxlPkRPTVN0b3JhZ2UuanM8L2ZpbGU+CisgICAgPGZpbGU+RE9NU3RvcmFnZUl0ZW1zVmll
dy5qczwvZmlsZT4KICAgICA8ZmlsZT5FbGVtZW50c1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxl
PkVsZW1lbnRzVHJlZU91dGxpbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+Rm9udFZpZXcuanM8L2Zp
bGU+CkBAIC02Niw2ICs2OCw3IEBACiAgICAgPGZpbGU+SW1hZ2VzL2Rpc2Nsb3N1cmVUcmlhbmds
ZVNtYWxsUmlnaHREb3duV2hpdGUucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9kaXNjbG9z
dXJlVHJpYW5nbGVTbWFsbFJpZ2h0V2hpdGUucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9k
b2NrQnV0dG9ucy5wbmc8L2ZpbGU+CisgICAgPGZpbGU+SW1hZ2VzL2RvbVN0b3JhZ2UucG5nPC9m
aWxlPgogICAgIDxmaWxlPkltYWdlcy9lbGVtZW50c0ljb24ucG5nPC9maWxlPgogICAgIDxmaWxl
PkltYWdlcy9lbmFibGVCdXR0b25zLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvZXJyb3JJ
Y29uLnBuZzwvZmlsZT4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmh0bWwJKHJldmlzaW9uIDQwNTYzKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2UuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlQ2F0ZWdvcnku
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRh
dGFiYXNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJET01TdG9yYWdlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJET01TdG9yYWdlSXRlbXNWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEYXRhR3JpZC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0LmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJCcmVha3BvaW50Lmpz
Ij48L3NjcmlwdD4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdl
SXRlbXNWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01TdG9yYWdlSXRlbXNWaWV3LmpzCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RPTVN0b3JhZ2VJdGVtc1ZpZXcuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5ET01T
dG9yYWdlSXRlbXNWaWV3ID0gZnVuY3Rpb24oZG9tU3RvcmFnZSkKK3sKKyAgICBXZWJJbnNwZWN0
b3IuVmlldy5jYWxsKHRoaXMpOworCisgICAgdGhpcy5kb21TdG9yYWdlID0gZG9tU3RvcmFnZTsK
KworICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzdG9yYWdlLXZpZXciKTsKKyAgICB0
aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygidGFibGUiKTsKK30KKworV2ViSW5zcGVjdG9yLkRP
TVN0b3JhZ2VJdGVtc1ZpZXcucHJvdG90eXBlID0geworICAgIHNob3c6IGZ1bmN0aW9uKHBhcmVu
dEVsZW1lbnQpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc2hv
dy5jYWxsKHRoaXMsIHBhcmVudEVsZW1lbnQpOworICAgICAgICB0aGlzLnVwZGF0ZSgpOworICAg
IH0sCisKKyAgICB1cGRhdGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB2YXIgaGFzRE9NU3RvcmFnZSA9IHRoaXMuZG9t
U3RvcmFnZTsKKyAgICAgICAgaWYgKGhhc0RPTVN0b3JhZ2UpCisgICAgICAgICAgICBoYXNET01T
dG9yYWdlID0gdGhpcy5kb21TdG9yYWdlLmRvbVN0b3JhZ2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoaGFzRE9NU3RvcmFnZSkgeworICAgICAgICAgICAgdmFyIGRhdGFHcmlkID0gV2ViSW5zcGVj
dG9yLnBhbmVscy5kYXRhYmFzZXMuZGF0YUdyaWRGb3JET01TdG9yYWdlKHRoaXMuZG9tU3RvcmFn
ZS5kb21TdG9yYWdlKTsKKyAgICAgICAgICAgIGlmICghZGF0YUdyaWQpCisgICAgICAgICAgICAg
ICAgaGFzRE9NU3RvcmFnZSA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRhdGFHcmlkLmVsZW1lbnQpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghaGFzRE9NU3RvcmFnZSkgeworICAgICAgICAgICAgdmFyIGVtcHR5TXNnRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgZW1wdHlN
c2dFbGVtZW50LmNsYXNzTmFtZSA9ICJzdG9yYWdlLXRhYmxlLWVtcHR5IjsKKyAgICAgICAgICAg
IGlmICh0aGlzLmRvbVN0b3JhZ2UpCisgICAgICAgICAgICBlbXB0eU1zZ0VsZW1lbnQudGV4dENv
bnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoaXMgc3RvcmFnZSBpcyBlbXB0eS4iKTsK
KyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlbXB0eU1zZ0VsZW1lbnQpOwor
ICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUl0ZW1zVmlldy5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOwo=
</data>
<flag name="review"
          id="13182"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>27322</attachid>
            <date>2009-02-04 11:25:25 -0800</date>
            <delta_ts>2009-02-04 11:25:25 -0800</delta_ts>
            <desc>The new image</desc>
            <filename>domStorage.png</filename>
            <type>image/png</type>
            <size>442</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB
bElEQVRIie2Vu0oDURCGv92NpomX2ofwFVJbi7WdYKc2Nj6CeGkUO2vFVoQ0ptRKBNMYMIWkTYyS
GDUei93Ze9yzQThg8ldn58wMc/6ZfwfGHdbl6ZoCsBzbtXwrAJRSSWfLSk2ilErEC5ZWT9KDPNj5
6v17FKTyhcX1yEXz/hiA8vJeIijORBpb1YstrQLMMxDvmQ/P3u08Yzkl1/TZGZpIWLGnZiLxWTDP
gPRPeh5Xwe3Vru88igqyYJ4BeVVCBXdHAJRX9kdKXD3f1PIzz0CWQ7fVwCnOATD4eIleeu0Oz4Yl
KtCEeQYyVVA58J0nKtCB5Ls+29DyN89A2iaDYAZ6rSec4jwAg34bSJsFhaSxp2dzFWCeATnEVSC4
qRz654kKxFfmI/4dxv/ZBe/thj/Zg767C4JZCF4uJIhidGGegVq9CcDD4w4A8UGv1bf91w0RAeER
EJ8hv5dkAbqV/oa3wmvCVvrKt5bHFz9CoJe+IKh6CAAAAABJRU5ErkJggg==
</data>

          </attachment>
      

    </bug>

</bugzilla>