<?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>127868</bug_id>
          
          <creation_ts>2014-01-29 16:29:53 -0800</creation_ts>
          <short_desc>IDB: Index reading</short_desc>
          <delta_ts>2022-03-14 16:36:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>124521</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
    
    <cc>liachen</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>973519</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2014-01-29 16:29:53 -0800</bug_when>
    <thetext>IDB: Index reading/writing

&lt;rdar://problem/15899973&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974234</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-30 23:48:37 -0800</bug_when>
    <thetext>This will be done in two separate patches.

Index writing is first.  It&apos;s straightforward and easy to verify by manual debugging and manual inspection on disk that it is working as expected.

Index reading will actually be implemented in terms of index cursors later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974235</commentid>
    <comment_count>2</comment_count>
      <attachid>222799</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-31 00:01:14 -0800</bug_when>
    <thetext>Created attachment 222799
Index *writing* patch, v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974236</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-31 00:02:39 -0800</bug_when>
    <thetext>Attachment 222799 did not pass style-queue:


ERROR: Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabaseBackingStore.h:71:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974237</commentid>
    <comment_count>4</comment_count>
      <attachid>222800</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-31 00:02:49 -0800</bug_when>
    <thetext>Created attachment 222800
Writing v2 - Fix style nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974291</commentid>
    <comment_count>5</comment_count>
      <attachid>222800</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-31 07:47:51 -0800</bug_when>
    <thetext>Comment on attachment 222800
Writing v2 - Fix style nit.

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

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:239
&gt; +            IDBIndexMetadata idxMetadata;

No need to abbreviate index here.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:256
&gt; +            auto objectStoreMetadata = metadata-&gt;objectStores.find(objectStoreID);

I&apos;d call this objectStoreMetadataIt to indicate that it&apos;s an iterator (especially since you&apos;re using auto).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974292</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-31 07:51:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/163170</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974293</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-01-31 07:51:26 -0800</bug_when>
    <thetext>Retitling to reflect that only reading remains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974596</commentid>
    <comment_count>8</comment_count>
      <attachid>222877</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-02-01 00:15:00 -0800</bug_when>
    <thetext>Created attachment 222877
Reading patch v1 - Implement with a cursor!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974631</commentid>
    <comment_count>9</comment_count>
      <attachid>222877</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-02-01 10:48:33 -0800</bug_when>
    <thetext>Comment on attachment 222877
Reading patch v1 - Implement with a cursor!

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

r=me with obligatory nit.

&gt; Source/WebKit2/DatabaseProcess/IndexedDB/sqlite/UniqueIDBDatabaseBackingStoreSQLite.cpp:837
&gt; +

Ob-nit: Unnecessary whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974635</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-02-01 11:07:13 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/163246</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851075</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2022-03-14 16:36:02 -0700</bug_when>
    <thetext>*** Bug 116223 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222799</attachid>
            <date>2014-01-31 00:01:14 -0800</date>
            <delta_ts>2014-01-31 00:02:49 -0800</delta_ts>
            <desc>Index *writing* patch, v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21086</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYWQ2OTc0Li40ZTcyY2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElEQjogSW5kZXggd3JpdGluZworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU4OTk5NzM+
IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVjdGlvbkludGVybmFsKTogUmVtb3ZlIG91dGRhdGVkIGNv
bW1lbnQgYW5kIEFTU0VSVC4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRl
eCk6IENvbmRpdGlvbmFsaXplIGEgYmxvY2sgb2YgY29kZSB0aGF0IGlzIExldmVsREItb25seS4K
KworICAgICAgICBSZW1vdmUgZ2V0Q29sdW1uQmxvYigpLiAgTm9ib2R5IHVzZWQgaXQsIGFuZCBp
dCB3YXMgZGFuZ2Vyb3VzIGJlY2F1c2UgaXQgcmVzZXQgdGhlIHN0YXRlbWVudDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKIDIwMTQt
MDEtMzAgIFJvZ2VyIEZvbmcgIDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJH
TCBsb2FkIHBvbGljeSBzaG91bGQgYmUgcXVlcmllZCBmb3IgdGhlIHRvcCBsZXZlbCBkb2N1bWVu
dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmQuY3BwCmluZGV4IGQzZGEyZGIzLi4xM2VkOWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAK
QEAgLTQ2Nyw5ICs0NjcsNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkNvbm5lY3Rp
b25JbnRlcm5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbAogICAgIGJvb2wgaXNO
ZXdEYXRhYmFzZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb247CiAKICAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpE
ZWZhdWx0SW50VmVyc2lvbikgewotICAgICAgICAvLyBGSVhNRTogdGhpcyBjb21tZW50cyB3YXMg
cmVsYXRlZCB0byBDaHJvbWl1bSBjb2RlLiBJdCBtYXkgYmUgaW5jb3JyZWN0Ci0gICAgICAgIC8v
IEZvciB1bml0IHRlc3RzIG9ubHkgLSBza2lwIHVwZ3JhZGUgc3RlcHMuIENhbGxpbmcgZnJvbSBz
Y3JpcHQgd2l0aCBEZWZhdWx0SW50VmVyc2lvbiB0aHJvd3MgZXhjZXB0aW9uLgotICAgICAgICBB
U1NFUlQoaXNOZXdEYXRhYmFzZSk7CiAgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRk
KGRhdGFiYXNlQ2FsbGJhY2tzKTsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywg
dGhpcy0+bWV0YWRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBkNDI4OTZmLi5k
M2JhNWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCkBAIC00MTUsNiArNDE1LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCisjaWYgVVNFKExFVkVMREIpCiAg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IGluZGV4UmVxdWVzdCA9IG9wZW5DdXJzb3IoY29udGV4dCwg
c3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCks
IElEQkRhdGFiYXNlQmFja2VuZDo6UHJlZW1wdGl2ZVRhc2ssIGVjKTsKICAgICBBU1NFUlQoIWVj
KTsKICAgICBpZiAoZWMpCkBAIC00MjQsNiArNDI1LDkgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQKICAgICAvLyBUaGlzIGlzIGtlcHQgYWxpdmUgYnkgYmVpbmcgdGhlIHN1Y2Nlc3MgaGFuZGxl
ciBvZiB0aGUgcmVxdWVzdCwgd2hpY2ggaXMgaW4gdHVybiBrZXB0IGFsaXZlIGJ5IHRoZSBvd25p
bmcgdHJhbnNhY3Rpb24uCiAgICAgUmVmUHRyPEluZGV4UG9wdWxhdG9yPiBpbmRleFBvcHVsYXRv
ciA9IEluZGV4UG9wdWxhdG9yOjpjcmVhdGUoYmFja2VuZERCKCksIG1fdHJhbnNhY3Rpb24tPmlk
KCksIGlkKCksIG1ldGFkYXRhKTsKICAgICBpbmRleFJlcXVlc3QtPnNldE9uc3VjY2VzcyhpbmRl
eFBvcHVsYXRvcik7CisjZWxzZQorICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dCk7
CisjZW5kaWYKIAogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IGNmZTQyMzEuLmQ0MDhkYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC04Miw3
ICs4Miw2IEBAIF9fWk43V2ViQ29yZTEwTW91c2VFdmVudDZjcmVhdGVFUktOM1dURjEyQXRvbWlj
U3RyaW5nRWJiZE5TMV8xMFBhc3NSZWZQdHJJTlNfOURPCiBfX1pON1dlYkNvcmUxMFBhc3RlYm9h
cmQxNHdyaXRlUGxhaW5UZXh0RVJLTjNXVEY2U3RyaW5nRU5TMF8xOFNtYXJ0UmVwbGFjZU9wdGlv
bkUKIF9fWk43V2ViQ29yZTEwUmVuZGVyVmlldzEwY29tcG9zaXRvckV2CiBfX1pON1dlYkNvcmUx
MFJlbmRlclZpZXc3aGl0VGVzdEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJl
c3VsdEUKLV9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTNnZXRDb2x1bW5CbG9iRWlSaQog
X19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxNGdldENvbHVtbkludDY0RWkKIF9fWk43V2Vi
Q29yZTE1U1FMaXRlU3RhdGVtZW50MjFnZXRDb2x1bW5CbG9iQXNWZWN0b3JFaVJOM1dURjZWZWN0
b3JJY0xtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTEwU2Nyb2xsVmll
dzE2c2V0UGFyZW50VmlzaWJsZUViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IDM0ODZiMmIuLjUyNmMwMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC00MjgsMzQgKzQy
OCw2IEBAIHZvaWQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IoaW50IGNv
bCwgVmVjdG9yPGNoYXI+JiByZXN1bHQpCiAgICAgICAgIHJlc3VsdFtpXSA9IChzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYmxvYikpW2ldOwogfQogCi1jb25zdCB2b2lkKiBTUUxp
dGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2IoaW50IGNvbCwgaW50JiBzaXplKQotewotICAgIEFT
U0VSVChjb2wgPj0gMCk7Ci0KLSAgICBzaXplID0gMDsKLQotICAgIGlmIChmaW5hbGl6ZSgpICE9
IFNRTElURV9PSykKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRmluYWxpemUgZmFpbGVkIik7
Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAiUHJlcGFyZSBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
IChzdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTdGVw
IHdhc24ndCBhIHJvdyIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoY29s
dW1uQ291bnQoKSA8PSBjb2wpCi0gICAgICAgIHJldHVybiAwOwotICAgICAgICAKLSAgICBjb25z
dCB2b2lkKiBibG9iID0gc3FsaXRlM19jb2x1bW5fYmxvYihtX3N0YXRlbWVudCwgY29sKTsKLSAg
ICBpZiAoIWJsb2IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgc2l6ZSA9IHNxbGl0ZTNfY29s
dW1uX2J5dGVzKG1fc3RhdGVtZW50LCBjb2wpOwotICAgIHJldHVybiBibG9iOwotfQotCiBib29s
IFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPFN0cmlu
Zz4mIHYpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAppbmRleCA4YTllNGFjLi4wZmViNTdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBAIC04MSw3ICs4
MSw2IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZ2V0Q29sdW1uRG91YmxlKGludCBjb2wpOwogICAg
IGludCBnZXRDb2x1bW5JbnQoaW50IGNvbCk7CiAgICAgaW50NjRfdCBnZXRDb2x1bW5JbnQ2NChp
bnQgY29sKTsKLSAgICBjb25zdCB2b2lkKiBnZXRDb2x1bW5CbG9iKGludCBjb2wsIGludCYgc2l6
ZSk7CiAgICAgU3RyaW5nIGdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKTsKICAgICB2b2lk
IGdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDcxMDI5NGQuLjE0YThlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNSBAQAogMjAx
NC0wMS0zMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgSURC
OiBJbmRleCB3cml0aW5nCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTg5OTk3Mz4gYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4NjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0UmVjb3JkSW5CYWNraW5nU3RvcmUpOiBIYW5kbGUgd3JpdGluZyBpbmRl
eCByZWNvcmRzLCBhcyB3ZWxsLgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIERhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKTogQ3JlYXRlIGEgdGFibGUKKyAg
ICAgICAgICBmb3IgaW5kZXggcmVjb3JkcworICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEpOiBFeHRyYWN0
IElEQkluZGV4TWV0YWRhdGEKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGU6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAg
KFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dEluZGV4UmVj
b3JkKTogU3RvcmUgaW4gdGhlIEluZGV4UmVjb3JkcyB0YWJsZS4KKyAgICAgICAgKiBEYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZS5oOgorCisyMDE0LTAxLTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
KwogICAgICAgICBJREI6IEltcGxlbWVudCBJREJPYmplY3RTdG9yZS5jb3VudCgpCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4ODgKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJE
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCAzZjkxMDk0Li5jNDk1NzRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcApAQCAtODAwLDE0ICs4MDAsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cHV0UmVjb3JkSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJ
REJJZGUKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGUgTGV2ZWxEQiBwb3J0
IHBlcmZvcm1zICJtYWtlSW5kZXhXcml0ZXJzIiBoZXJlLiBOZWNlc3Nhcnk/Ci0KICAgICBpZiAo
IW1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRh
dGEuaWQsICprZXksIHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKSkgewogICAgICAgICBwb3N0
TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEoKSwgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBi
YWNraW5nIHN0b3JlIGVycm9yIHB1dHRpbmcgYSByZWNvcmQiKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoZSBMZXZlbERCIHBvcnQgdXBkYXRlcyBpbmRleCBr
ZXlzIGhlcmUuIE5lY2Vzc2FyeT8KKyAgICBBU1NFUlQoaW5kZXhJRHMuc2l6ZSgpID09IGluZGV4
S2V5cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJRHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleXNbaV0uc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnB1dEluZGV4UmVj
b3JkKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBpbmRleElEc1tpXSwga2V5
RGF0YSwgaW5kZXhLZXlzW2ldW2pdKSkgeworICAgICAgICAgICAgICAgIHBvc3RNYWluVGhyZWFk
VGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUHV0UmVj
b3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5RGF0YSgpLCBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGJhY2tpbmcgc3Rv
cmUgZXJyb3Igd3JpdGluZyBpbmRleCBrZXkiKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChwdXRNb2RlICE9IElE
QkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIG9iamVjdFN0b3JlTWV0YWRhdGEuYXV0
b0luY3JlbWVudCAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKICAgICAg
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBrZXlOdW1iZXIsIGtleVdhc0dlbmVyYXRlZCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaAppbmRleCA2
MzFlMWE4Li4yNTljNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZS5oCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXkmLCBi
b29sJiBrZXlFeGlzdHMpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlE
LCBjb25zdCBXZWJDb3JlOjpJREJLZXkmLCBjb25zdCB1aW50OF90KiB2YWx1ZUJ1ZmZlciwgc2l6
ZV90IHZhbHVlU2l6ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleFJlY29yZChjb25z
dCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBrZXksIGNv
bnN0IFdlYkNvcmU6OklEQktleURhdGEmIGluZGV4S2V5KSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0S2V5UmVjb3JkRnJvbU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJ
REJLZXkmLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYgcmVzdWx0KSA9IDA7CiAgICAg
dmlydHVhbCBib29sIGdldEtleVJhbmdlUmVjb3JkRnJvbU9iamVjdFN0b3JlKGNvbnN0IElEQklk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBj
b25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
JiByZXN1bHQsIFJlZlB0cjxXZWJDb3JlOjpJREJLZXk+JiByZXN1bHRLZXkpID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1Vu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmNwcAppbmRleCA2NzNmOWIyLi5iNThmOTllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
Y3BwCkBAIC05OSw2ICs5OSwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VNZXRhZGF0
YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNyZWF0ZQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21t
YW5kKCJDUkVBVEUgVEFCTEUgSW5kZXhSZWNvcmRzIChpbmRleElEIElOVEVHRVIgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCwgb2JqZWN0U3RvcmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZM
SUNUIEZBSUwsIGtleSBURVhUIENPTExBVEUgSURCS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBSZWNvcmRz
IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRy
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKICAgICBpZiAoIW1fc3FsaXRlREIt
PmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgS2V5R2VuZXJhdG9ycyAob2JqZWN0U3RvcmVJ
RCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UsIGN1cnJlbnRLZXkgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkg
ewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgS2V5R2VuZXJhdG9ycyB0YWJs
ZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsKQEAg
LTIwMiwxMSArMjA4LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjCiAgICAgICAgICAgICBv
c01ldGFkYXRhLmlkID0gc3FsLmdldENvbHVtbkludDY0KDApOwogICAgICAgICAgICAgb3NNZXRh
ZGF0YS5uYW1lID0gc3FsLmdldENvbHVtblRleHQoMSk7CiAKLSAgICAgICAgICAgIGludCBrZXlQ
YXRoU2l6ZTsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGtleVBhdGhCdWZmZXIgPSBzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oc3FsLmdldENvbHVtbkJsb2IoMiwga2V5UGF0aFNpemUp
KTsKLQorICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7CisgICAgICAgICAg
ICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9yKDIsIGtleVBhdGhCdWZmZXIpOwogCi0gICAgICAg
ICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5UGF0aChrZXlQYXRoQnVmZmVyLCBrZXlQYXRoU2l6
ZSwgb3NNZXRhZGF0YS5rZXlQYXRoKSkgeworICAgICAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlE
QktleVBhdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oa2V5UGF0aEJ1ZmZlci5k
YXRhKCkpLCBrZXlQYXRoQnVmZmVyLnNpemUoKSwgb3NNZXRhZGF0YS5rZXlQYXRoKSkgewogICAg
ICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4dHJhY3Qga2V5IHBhdGggbWV0YWRh
dGEgZnJvbSBkYXRhYmFzZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICAgICAgfQpAQCAtMjI0LDcgKzIyOSw0NiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJh
c2VNZXRhZGF0YT4gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmV4dHJhYwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gRklYTUU6IE9uY2Ugd2Ugc2F2ZSBpbmRleGVzIHdl
IG5lZWQgdG8gZXh0cmFjdCB0aGVpciBtZXRhZGF0YSwgYWxzby4KKyAgICB7CisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGlkLCBu
YW1lLCBvYmplY3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIElu
ZGV4SW5mbzsiKSk7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5z
dGVwKCk7CisgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7CisgICAgICAg
ICAgICBJREJJbmRleE1ldGFkYXRhIGlkeE1ldGFkYXRhOworCisgICAgICAgICAgICBpZHhNZXRh
ZGF0YS5pZCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgICAgIGlkeE1ldGFkYXRh
Lm5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICAgICAgICAgIGludDY0X3Qgb2JqZWN0
U3RvcmVJRCA9IHNxbC5nZXRDb2x1bW5JbnQ2NCgyKTsKKworICAgICAgICAgICAgVmVjdG9yPGNo
YXI+IGtleVBhdGhCdWZmZXI7CisgICAgICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9y
KDMsIGtleVBhdGhCdWZmZXIpOworCisgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5
UGF0aChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEo
KSksIGtleVBhdGhCdWZmZXIuc2l6ZSgpLCBpZHhNZXRhZGF0YS5rZXlQYXRoKSkgeworICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4dHJhY3Qga2V5IHBhdGggbWV0YWRhdGEg
ZnJvbSBkYXRhYmFzZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZHhNZXRhZGF0YS51bmlxdWUgPSBzcWwuZ2V0Q29sdW1u
SW50KDQpOworICAgICAgICAgICAgaWR4TWV0YWRhdGEubXVsdGlFbnRyeSA9IHNxbC5nZXRDb2x1
bW5JbnQoNSk7CisKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1ldGFk
YXRhLT5vYmplY3RTdG9yZXMuZmluZChvYmplY3RTdG9yZUlEKTsKKyAgICAgICAgICAgIGlmIChv
YmplY3RTdG9yZU1ldGFkYXRhID09IG1ldGFkYXRhLT5vYmplY3RTdG9yZXMuZW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoIkZvdW5kIGluZGV4IHJlZmVycmluZyB0byBhIG5vbi1l
eGlzdGFudCBvYmplY3Qgc3RvcmUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb2JqZWN0U3RvcmVNZXRhZGF0YS0+dmFsdWUu
aW5kZXhlcy5zZXQoaWR4TWV0YWRhdGEuaWQsIGlkeE1ldGFkYXRhKTsKKworICAgICAgICAgICAg
cmVzdWx0ID0gc3FsLnN0ZXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQgIT0g
U1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBmZXRjaGluZyBp
bmRleCBtZXRhZGF0YSBmcm9tIGRhdGFiYXNlIG9uIGRpc2siKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgfQogCiAgICAgcmV0dXJuIG1ldGFkYXRhOwogfQpA
QCAtNDUyLDMzICs0OTYsMzcgQEAgYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYKICAgICAgICAgfQog
ICAgIH0KIAotICAgIC8vIERlbGV0ZSBhbGwgYXNzb2NpYXRlZCBJbmRleCByZWNvcmRzCisgICAg
Ly8gRGVsZXRlIGFsbCBhc3NvY2lhdGVkIHJlY29yZHMKICAgICB7Ci0gICAgICAgIFZlY3Rvcjxp
bnQ2NF90PiBpbmRleElEczsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVE
QiwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgaWQgRlJPTSBJbmRleEluZm8gV0hFUkUgb2JqZWN0U3Rv
cmVJRCA9ID87IikpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBB
U0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID87
IikpOwogICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPawotICAgICAgICAg
ICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxSZXN1bHRPaykgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBmZXRjaGluZyBpbmRleCBJRCByZWNvcmRzIGZv
ciBvYmplY3Qgc3RvcmUgaWQgJWxsaSBmcm9tIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBv
YmplY3RTdG9yZUlELCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOworICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlE
KSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxSZXN1bHRE
b25lKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxldGUgcmVjb3JkcyBm
b3Igb2JqZWN0IHN0b3JlICVsbGkgKCVpKSAtICVzIiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpbnQgcmVzdWx0Q29k
ZTsKLSAgICAgICAgd2hpbGUgKChyZXN1bHRDb2RlID0gc3FsLnN0ZXAoKSkgPT0gU1FMUmVzdWx0
Um93KQotICAgICAgICAgICAgaW5kZXhJRHMuYXBwZW5kKHNxbC5nZXRDb2x1bW5JbnQ2NCgwKSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdENvZGUgIT0gU1FMUmVzdWx0RG9uZSkgewotICAgICAgICAg
ICAgTE9HX0VSUk9SKCJFcnJvciBmZXRjaGluZyBpbmRleCBJRCByZWNvcmRzIGZvciBvYmplY3Qg
c3RvcmUgaWQgJWxsaSBmcm9tIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9y
ZUlELCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkp
OworICAgIC8vIERlbGV0ZSBhbGwgYXNzb2NpYXRlZCBJbmRleGVzCisgICAgeworICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9N
IEluZGV4SW5mbyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPzsiKSk7CisgICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEs
IG9iamVjdFN0b3JlSUQpICE9IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgp
ICE9IFNRTFJlc3VsdERvbmUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRl
bGV0ZSBpbmRleCBmcm9tIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChhdXRvIGluZGV4SUQgOiBpbmRl
eElEcykgewotICAgICAgICAgICAgaWYgKCFkZWxldGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIG9iamVjdFN0b3JlSUQsIGluZGV4SUQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQogICAgIH0KIAorICAgIC8vIERlbGV0ZSBhbGwgYXNzb2NpYXRlZCBJbmRl
eCByZWNvcmRzCiAgICAgewotICAgICAgICAvLyBGSVhNRTogRXhlY3V0ZSBTUUwgaGVyZSB0byBk
cm9wIGFsbCByZWNvcmRzIHJlbGF0ZWQgdG8gdGhpcyBvYmplY3Qgc3RvcmUuCisgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiREVMRVRFIEZST00g
SW5kZXhSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/OyIpKTsKKyAgICAgICAgaWYgKHNx
bC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQo
MSwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5zdGVw
KCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
ZGVsZXRlIGluZGV4IHJlY29yZHMoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC01NzksNyArNjI3LDE3IEBA
IGJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmRlbGV0ZUluZGV4KGNv
bnN0IElEQklkZW50aWZpZXImIHRyYW5zCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBGSVhN
RSAoPHJkYXI6Ly9wcm9ibGVtLzE1OTA1MjkzPikgLSBPbmNlIHdlIHN0b3JlIHJlY29yZHMgYWdh
aW5zdCBpbmRleGVzLCBkZWxldGUgdGhlbSBoZXJlLgorICAgIHsKKyAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBJbmRleFJl
Y29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyIpKTsKKyAgICAg
ICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5i
aW5kSW50NjQoMSwgaW5kZXhJRCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5i
aW5kSW50NjQoMiwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8
IHNxbC5zdGVwKCkgIT0gU1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgZGVsZXRlIGluZGV4IHJlY29yZHMgZm9yIGluZGV4IGlkICVsbGkgZnJvbSBJbmRl
eFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgaW5kZXhJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
KCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02OTgsNiAr
NzU2LDQ5IEBAIGJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dFJl
Y29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dEluZGV4UmVjb3Jk
KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IElEQktleURhdGEmIGtleVZhbHVlLCBj
b25zdCBJREJLZXlEYXRhJiBpbmRleEtleSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3Bl
bigpKTsKKworICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOworICAgIGlmICghdHJhbnNhY3Rpb24g
fHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdHRl
bXB0IHRvIHB1dCBpbmRleCByZWNvcmQgaW50byBkYXRhYmFzZSB3aXRob3V0IGFuIGVzdGFibGlz
aGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlOjpSZWFkT25seSkgeworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gcHV0IGlu
ZGV4IHJlY29yZCBpbnRvIGRhdGFiYXNlIGR1cmluZyByZWFkLW9ubHkgdHJhbnNhY3Rpb24iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGluZGV4S2V5QnVmZmVyID0gc2VyaWFsaXplSURCS2V5RGF0YShpbmRleEtleSk7CisgICAgaWYg
KCFpbmRleEtleUJ1ZmZlcikgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxp
emUgaW5kZXgga2V5IHRvIGJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVy
ID0gc2VyaWFsaXplSURCS2V5RGF0YShrZXlWYWx1ZSk7CisgICAgaWYgKCF2YWx1ZUJ1ZmZlcikg
eworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgdGhlIHZhbHVlIHRvIGJl
IHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICB7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0
ZXJhbCgiSU5TRVJUIElOVE8gSW5kZXhSZWNvcmRzIFZBTFVFUyAoPywgPywgQ0FTVCg/IEFTIFRF
WFQpLCA/KTsiKSk7CisgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCisg
ICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIGluZGV4SUQpICE9IFNRTFJlc3VsdE9rCisg
ICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDIsIG9iamVjdFN0b3JlSUQpICE9IFNRTFJlc3Vs
dE9rCisgICAgICAgICAgICB8fCBzcWwuYmluZEJsb2IoMywgaW5kZXhLZXlCdWZmZXItPmRhdGEo
KSwgaW5kZXhLZXlCdWZmZXItPnNpemUoKSkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8
IHNxbC5iaW5kQmxvYig0LCB2YWx1ZUJ1ZmZlci0+ZGF0YSgpLCB2YWx1ZUJ1ZmZlci0+c2l6ZSgp
KSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxSZXN1bHRE
b25lKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwdXQgaW5kZXggcmVjb3Jk
IGZvciBpbmRleCAlbGxpIGluIG9iamVjdCBzdG9yZSAlbGxpIGluIFJlY29yZHMgdGFibGUgKCVp
KSAtICVzIiwgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpnZXRLZXlSZWNvcmRGcm9tT2JqZWN0U3RvcmUo
Y29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIGNvbnN0IElEQktleSYga2V5LCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYgcmVzdWx0
KQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VC
YWNraW5nU3RvcmVTUUxpdGUuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKaW5kZXgg
MmZmYmU0OC4uNzQyZTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9V
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oCkBAIC03Myw2ICs3Myw4IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlE
LCBjb25zdCBXZWJDb3JlOjpJREJLZXkmLCBib29sJiBrZXlFeGlzdHMpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleSYs
IGNvbnN0IHVpbnQ4X3QqIHZhbHVlQnVmZmVyLCBzaXplX3QgdmFsdWVTaXplKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJ
RCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYga2V5VmFsdWUsIGNvbnN0IFdlYkNvcmU6OklE
QktleURhdGEmIGluZGV4S2V5KSBvdmVycmlkZTsKKwogCiAgICAgdmlydHVhbCBib29sIGdldEtl
eVJlY29yZEZyb21PYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5Jiwg
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBib29sIGdldEtleVJhbmdlUmVjb3JkRnJvbU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50
aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25z
dCBXZWJDb3JlOjpJREJLZXlSYW5nZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiBy
ZXN1bHQsIFJlZlB0cjxXZWJDb3JlOjpJREJLZXk+JiByZXN1bHRLZXkpIG92ZXJyaWRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222800</attachid>
            <date>2014-01-31 00:02:49 -0800</date>
            <delta_ts>2014-02-01 00:15:00 -0800</delta_ts>
            <desc>Writing v2 - Fix style nit.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21082</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYWQ2OTc0Li40ZTcyY2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTQtMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElEQjogSW5kZXggd3JpdGluZworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU4OTk5NzM+
IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVjdGlvbkludGVybmFsKTogUmVtb3ZlIG91dGRhdGVkIGNv
bW1lbnQgYW5kIEFTU0VSVC4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRl
eCk6IENvbmRpdGlvbmFsaXplIGEgYmxvY2sgb2YgY29kZSB0aGF0IGlzIExldmVsREItb25seS4K
KworICAgICAgICBSZW1vdmUgZ2V0Q29sdW1uQmxvYigpLiAgTm9ib2R5IHVzZWQgaXQsIGFuZCBp
dCB3YXMgZGFuZ2Vyb3VzIGJlY2F1c2UgaXQgcmVzZXQgdGhlIHN0YXRlbWVudDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKIDIwMTQt
MDEtMzAgIFJvZ2VyIEZvbmcgIDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJH
TCBsb2FkIHBvbGljeSBzaG91bGQgYmUgcXVlcmllZCBmb3IgdGhlIHRvcCBsZXZlbCBkb2N1bWVu
dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmQuY3BwCmluZGV4IGQzZGEyZGIzLi4xM2VkOWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAK
QEAgLTQ2Nyw5ICs0NjcsNiBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6b3BlbkNvbm5lY3Rp
b25JbnRlcm5hbChQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbAogICAgIGJvb2wgaXNO
ZXdEYXRhYmFzZSA9IG1fbWV0YWRhdGEudmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb247CiAKICAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpE
ZWZhdWx0SW50VmVyc2lvbikgewotICAgICAgICAvLyBGSVhNRTogdGhpcyBjb21tZW50cyB3YXMg
cmVsYXRlZCB0byBDaHJvbWl1bSBjb2RlLiBJdCBtYXkgYmUgaW5jb3JyZWN0Ci0gICAgICAgIC8v
IEZvciB1bml0IHRlc3RzIG9ubHkgLSBza2lwIHVwZ3JhZGUgc3RlcHMuIENhbGxpbmcgZnJvbSBz
Y3JpcHQgd2l0aCBEZWZhdWx0SW50VmVyc2lvbiB0aHJvd3MgZXhjZXB0aW9uLgotICAgICAgICBB
U1NFUlQoaXNOZXdEYXRhYmFzZSk7CiAgICAgICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRk
KGRhdGFiYXNlQ2FsbGJhY2tzKTsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcywg
dGhpcy0+bWV0YWRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBkNDI4OTZmLi5k
M2JhNWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCkBAIC00MTUsNiArNDE1LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCisjaWYgVVNFKExFVkVMREIpCiAg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IGluZGV4UmVxdWVzdCA9IG9wZW5DdXJzb3IoY29udGV4dCwg
c3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCks
IElEQkRhdGFiYXNlQmFja2VuZDo6UHJlZW1wdGl2ZVRhc2ssIGVjKTsKICAgICBBU1NFUlQoIWVj
KTsKICAgICBpZiAoZWMpCkBAIC00MjQsNiArNDI1LDkgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4g
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQKICAgICAvLyBUaGlzIGlzIGtlcHQgYWxpdmUgYnkgYmVpbmcgdGhlIHN1Y2Nlc3MgaGFuZGxl
ciBvZiB0aGUgcmVxdWVzdCwgd2hpY2ggaXMgaW4gdHVybiBrZXB0IGFsaXZlIGJ5IHRoZSBvd25p
bmcgdHJhbnNhY3Rpb24uCiAgICAgUmVmUHRyPEluZGV4UG9wdWxhdG9yPiBpbmRleFBvcHVsYXRv
ciA9IEluZGV4UG9wdWxhdG9yOjpjcmVhdGUoYmFja2VuZERCKCksIG1fdHJhbnNhY3Rpb24tPmlk
KCksIGlkKCksIG1ldGFkYXRhKTsKICAgICBpbmRleFJlcXVlc3QtPnNldE9uc3VjY2VzcyhpbmRl
eFBvcHVsYXRvcik7CisjZWxzZQorICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dCk7
CisjZW5kaWYKIAogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCmluZGV4IGNmZTQyMzEuLmQ0MDhkYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC04Miw3
ICs4Miw2IEBAIF9fWk43V2ViQ29yZTEwTW91c2VFdmVudDZjcmVhdGVFUktOM1dURjEyQXRvbWlj
U3RyaW5nRWJiZE5TMV8xMFBhc3NSZWZQdHJJTlNfOURPCiBfX1pON1dlYkNvcmUxMFBhc3RlYm9h
cmQxNHdyaXRlUGxhaW5UZXh0RVJLTjNXVEY2U3RyaW5nRU5TMF8xOFNtYXJ0UmVwbGFjZU9wdGlv
bkUKIF9fWk43V2ViQ29yZTEwUmVuZGVyVmlldzEwY29tcG9zaXRvckV2CiBfX1pON1dlYkNvcmUx
MFJlbmRlclZpZXc3aGl0VGVzdEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJl
c3VsdEUKLV9fWk43V2ViQ29yZTE1U1FMaXRlU3RhdGVtZW50MTNnZXRDb2x1bW5CbG9iRWlSaQog
X19aTjdXZWJDb3JlMTVTUUxpdGVTdGF0ZW1lbnQxNGdldENvbHVtbkludDY0RWkKIF9fWk43V2Vi
Q29yZTE1U1FMaXRlU3RhdGVtZW50MjFnZXRDb2x1bW5CbG9iQXNWZWN0b3JFaVJOM1dURjZWZWN0
b3JJY0xtMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTEwU2Nyb2xsVmll
dzE2c2V0UGFyZW50VmlzaWJsZUViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVTdGF0ZW1lbnQuY3BwCmluZGV4IDM0ODZiMmIuLjUyNmMwMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCkBAIC00MjgsMzQgKzQy
OCw2IEBAIHZvaWQgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNWZWN0b3IoaW50IGNv
bCwgVmVjdG9yPGNoYXI+JiByZXN1bHQpCiAgICAgICAgIHJlc3VsdFtpXSA9IChzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYmxvYikpW2ldOwogfQogCi1jb25zdCB2b2lkKiBTUUxp
dGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2IoaW50IGNvbCwgaW50JiBzaXplKQotewotICAgIEFT
U0VSVChjb2wgPj0gMCk7Ci0KLSAgICBzaXplID0gMDsKLQotICAgIGlmIChmaW5hbGl6ZSgpICE9
IFNRTElURV9PSykKLSAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiRmluYWxpemUgZmFpbGVkIik7
Ci0gICAgaWYgKHByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAiUHJlcGFyZSBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
IChzdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJTdGVw
IHdhc24ndCBhIHJvdyIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoY29s
dW1uQ291bnQoKSA8PSBjb2wpCi0gICAgICAgIHJldHVybiAwOwotICAgICAgICAKLSAgICBjb25z
dCB2b2lkKiBibG9iID0gc3FsaXRlM19jb2x1bW5fYmxvYihtX3N0YXRlbWVudCwgY29sKTsKLSAg
ICBpZiAoIWJsb2IpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgc2l6ZSA9IHNxbGl0ZTNfY29s
dW1uX2J5dGVzKG1fc3RhdGVtZW50LCBjb2wpOwotICAgIHJldHVybiBibG9iOwotfQotCiBib29s
IFNRTGl0ZVN0YXRlbWVudDo6cmV0dXJuVGV4dFJlc3VsdHMoaW50IGNvbCwgVmVjdG9yPFN0cmlu
Zz4mIHYpCiB7CiAgICAgQVNTRVJUKGNvbCA+PSAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAppbmRleCA4YTllNGFjLi4wZmViNTdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBAIC04MSw3ICs4
MSw2IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZ2V0Q29sdW1uRG91YmxlKGludCBjb2wpOwogICAg
IGludCBnZXRDb2x1bW5JbnQoaW50IGNvbCk7CiAgICAgaW50NjRfdCBnZXRDb2x1bW5JbnQ2NChp
bnQgY29sKTsKLSAgICBjb25zdCB2b2lkKiBnZXRDb2x1bW5CbG9iKGludCBjb2wsIGludCYgc2l6
ZSk7CiAgICAgU3RyaW5nIGdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKTsKICAgICB2b2lk
IGdldENvbHVtbkJsb2JBc1ZlY3RvcihpbnQgY29sLCBWZWN0b3I8Y2hhcj4mKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDcxMDI5NGQuLjE0YThlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNSBAQAogMjAx
NC0wMS0zMCAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgSURC
OiBJbmRleCB3cml0aW5nCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTg5OTk3Mz4gYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4NjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpVbmlxdWVJ
REJEYXRhYmFzZTo6cHV0UmVjb3JkSW5CYWNraW5nU3RvcmUpOiBIYW5kbGUgd3JpdGluZyBpbmRl
eCByZWNvcmRzLCBhcyB3ZWxsLgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIERhdGFiYXNlUHJv
Y2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbE1ldGFkYXRhKTogQ3JlYXRlIGEgdGFibGUKKyAg
ICAgICAgICBmb3IgaW5kZXggcmVjb3JkcworICAgICAgICAoV2ViS2l0OjpVbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEpOiBFeHRyYWN0
IElEQkluZGV4TWV0YWRhdGEKKyAgICAgICAgKFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGU6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6VW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAg
KFdlYktpdDo6VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dEluZGV4UmVj
b3JkKTogU3RvcmUgaW4gdGhlIEluZGV4UmVjb3JkcyB0YWJsZS4KKyAgICAgICAgKiBEYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZS5oOgorCisyMDE0LTAxLTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
KwogICAgICAgICBJREI6IEltcGxlbWVudCBJREJPYmplY3RTdG9yZS5jb3VudCgpCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4ODgKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJE
YXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCAzZjkxMDk0Li5jNDk1NzRlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcApAQCAtODAwLDE0ICs4MDAsMjAgQEAgdm9pZCBVbmlxdWVJREJEYXRh
YmFzZTo6cHV0UmVjb3JkSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJ
REJJZGUKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGUgTGV2ZWxEQiBwb3J0
IHBlcmZvcm1zICJtYWtlSW5kZXhXcml0ZXJzIiBoZXJlLiBOZWNlc3Nhcnk/Ci0KICAgICBpZiAo
IW1fYmFja2luZ1N0b3JlLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRh
dGEuaWQsICprZXksIHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKSkgewogICAgICAgICBwb3N0
TWFpblRocmVhZFRhc2soY3JlYXRlQXN5bmNUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6
OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEoKSwgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBi
YWNraW5nIHN0b3JlIGVycm9yIHB1dHRpbmcgYSByZWNvcmQiKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoZSBMZXZlbERCIHBvcnQgdXBkYXRlcyBpbmRleCBr
ZXlzIGhlcmUuIE5lY2Vzc2FyeT8KKyAgICBBU1NFUlQoaW5kZXhJRHMuc2l6ZSgpID09IGluZGV4
S2V5cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJRHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpbmRleEtleXNbaV0uc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnB1dEluZGV4UmVj
b3JkKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBpbmRleElEc1tpXSwga2V5
RGF0YSwgaW5kZXhLZXlzW2ldW2pdKSkgeworICAgICAgICAgICAgICAgIHBvc3RNYWluVGhyZWFk
VGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUHV0UmVj
b3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5RGF0YSgpLCBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGJhY2tpbmcgc3Rv
cmUgZXJyb3Igd3JpdGluZyBpbmRleCBrZXkiKSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChwdXRNb2RlICE9IElE
QkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRlICYmIG9iamVjdFN0b3JlTWV0YWRhdGEuYXV0
b0luY3JlbWVudCAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKICAgICAg
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBrZXlOdW1iZXIsIGtleVdhc0dlbmVyYXRlZCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaAppbmRleCA2
MzFlMWE4Li5hNWM5YWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZS5oCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXkmLCBi
b29sJiBrZXlFeGlzdHMpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlE
LCBjb25zdCBXZWJDb3JlOjpJREJLZXkmLCBjb25zdCB1aW50OF90KiB2YWx1ZUJ1ZmZlciwgc2l6
ZV90IHZhbHVlU2l6ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleFJlY29yZChjb25z
dCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3Qg
V2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXkpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBn
ZXRLZXlSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktl
eSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1bHQpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0S2V5UmFuZ2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0
IFdlYkNvcmU6OklEQktleVJhbmdlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIHJl
c3VsdCwgUmVmUHRyPFdlYkNvcmU6OklEQktleT4mIHJlc3VsdEtleSkgPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGUuY3BwCmluZGV4IDY3M2Y5YjIuLmI1OGY5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFj
a2luZ1N0b3JlU1FMaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAK
QEAgLTk5LDYgKzk5LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y3JlYXRlCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAorICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQo
IkNSRUFURSBUQUJMRSBJbmRleFJlY29yZHMgKGluZGV4SUQgSU5URUdFUiBOT1QgTlVMTCBPTiBD
T05GTElDVCBGQUlMLCBvYmplY3RTdG9yZUlEIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1Qg
RkFJTCwga2V5IFRFWFQgQ09MTEFURSBJREJLRVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBV
TklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFJlY29yZHMgdGFi
bGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3Fs
aXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwogICAgIGlmICghbV9zcWxpdGVEQi0+ZXhl
Y3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBLZXlHZW5lcmF0b3JzIChvYmplY3RTdG9yZUlEIElO
VEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFD
RSwgY3VycmVudEtleSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBLZXlHZW5lcmF0b3JzIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwpAQCAtMjAy
LDExICsyMDgsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpleHRyYWMKICAgICAgICAgICAgIG9zTWV0
YWRhdGEuaWQgPSBzcWwuZ2V0Q29sdW1uSW50NjQoMCk7CiAgICAgICAgICAgICBvc01ldGFkYXRh
Lm5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsKIAotICAgICAgICAgICAgaW50IGtleVBhdGhT
aXplOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCoga2V5UGF0aEJ1ZmZlciA9IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihzcWwuZ2V0Q29sdW1uQmxvYigyLCBrZXlQYXRoU2l6ZSkpOwot
CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5UGF0aEJ1ZmZlcjsKKyAgICAgICAgICAgIHNx
bC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMiwga2V5UGF0aEJ1ZmZlcik7CiAKLSAgICAgICAgICAg
IGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKGtleVBhdGhCdWZmZXIsIGtleVBhdGhTaXplLCBv
c01ldGFkYXRhLmtleVBhdGgpKSB7CisgICAgICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5
UGF0aChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVmZmVyLmRhdGEo
KSksIGtleVBhdGhCdWZmZXIuc2l6ZSgpLCBvc01ldGFkYXRhLmtleVBhdGgpKSB7CiAgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXh0cmFjdCBrZXkgcGF0aCBtZXRhZGF0YSBm
cm9tIGRhdGFiYXNlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
ICAgICB9CkBAIC0yMjQsNyArMjI5LDQ2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1l
dGFkYXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICAvLyBGSVhNRTogT25jZSB3ZSBzYXZlIGluZGV4ZXMgd2UgbmVl
ZCB0byBleHRyYWN0IHRoZWlyIG1ldGFkYXRhLCBhbHNvLgorICAgIHsKKyAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgaWQsIG5hbWUs
IG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJ
bmZvOyIpKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAo
KTsKKyAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSBTUUxSZXN1bHRSb3cpIHsKKyAgICAgICAgICAg
IElEQkluZGV4TWV0YWRhdGEgaWR4TWV0YWRhdGE7CisKKyAgICAgICAgICAgIGlkeE1ldGFkYXRh
LmlkID0gc3FsLmdldENvbHVtbkludDY0KDApOworICAgICAgICAgICAgaWR4TWV0YWRhdGEubmFt
ZSA9IHNxbC5nZXRDb2x1bW5UZXh0KDEpOworICAgICAgICAgICAgaW50NjRfdCBvYmplY3RTdG9y
ZUlEID0gc3FsLmdldENvbHVtbkludDY0KDIpOworCisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
a2V5UGF0aEJ1ZmZlcjsKKyAgICAgICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywg
a2V5UGF0aEJ1ZmZlcik7CisKKyAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRo
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwg
a2V5UGF0aEJ1ZmZlci5zaXplKCksIGlkeE1ldGFkYXRhLmtleVBhdGgpKSB7CisgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXh0cmFjdCBrZXkgcGF0aCBtZXRhZGF0YSBmcm9t
IGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlkeE1ldGFkYXRhLnVuaXF1ZSA9IHNxbC5nZXRDb2x1bW5JbnQo
NCk7CisgICAgICAgICAgICBpZHhNZXRhZGF0YS5tdWx0aUVudHJ5ID0gc3FsLmdldENvbHVtbklu
dCg1KTsKKworICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZU1ldGFkYXRhID0gbWV0YWRhdGEt
Pm9iamVjdFN0b3Jlcy5maW5kKG9iamVjdFN0b3JlSUQpOworICAgICAgICAgICAgaWYgKG9iamVj
dFN0b3JlTWV0YWRhdGEgPT0gbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5lbmQoKSkgeworICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiRm91bmQgaW5kZXggcmVmZXJyaW5nIHRvIGEgbm9uLWV4aXN0
YW50IG9iamVjdCBzdG9yZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBvYmplY3RTdG9yZU1ldGFkYXRhLT52YWx1ZS5pbmRl
eGVzLnNldChpZHhNZXRhZGF0YS5pZCwgaWR4TWV0YWRhdGEpOworCisgICAgICAgICAgICByZXN1
bHQgPSBzcWwuc3RlcCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxS
ZXN1bHREb25lKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGZldGNoaW5nIGluZGV4
IG1ldGFkYXRhIGZyb20gZGF0YWJhc2Ugb24gZGlzayIpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICB9CiAKICAgICByZXR1cm4gbWV0YWRhdGE7CiB9CkBAIC00
NTIsMzMgKzQ5NiwzNyBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
OjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJgogICAgICAgICB9CiAgICAg
fQogCi0gICAgLy8gRGVsZXRlIGFsbCBhc3NvY2lhdGVkIEluZGV4IHJlY29yZHMKKyAgICAvLyBE
ZWxldGUgYWxsIGFzc29jaWF0ZWQgcmVjb3JkcwogICAgIHsKLSAgICAgICAgVmVjdG9yPGludDY0
X3Q+IGluZGV4SURzOwotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBB
U0NJSUxpdGVyYWwoIlNFTEVDVCBpZCBGUk9NIEluZGV4SW5mbyBXSEVSRSBvYmplY3RTdG9yZUlE
ID0gPzsiKSk7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJ
TGl0ZXJhbCgiREVMRVRFIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPzsiKSk7
CiAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rCi0gICAgICAgICAgICB8
fCBzcWwuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSUQpICE9IFNRTFJlc3VsdE9rKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGZldGNoaW5nIGluZGV4IElEIHJlY29yZHMgZm9yIG9i
amVjdCBzdG9yZSBpZCAlbGxpIGZyb20gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVj
dFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSUQpICE9
IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSByZWNvcmRzIGZvciBv
YmplY3Qgc3RvcmUgJWxsaSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUlELCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGludCByZXN1bHRDb2RlOwot
ICAgICAgICB3aGlsZSAoKHJlc3VsdENvZGUgPSBzcWwuc3RlcCgpKSA9PSBTUUxSZXN1bHRSb3cp
Ci0gICAgICAgICAgICBpbmRleElEcy5hcHBlbmQoc3FsLmdldENvbHVtbkludDY0KDApKTsKLQot
ICAgICAgICBpZiAocmVzdWx0Q29kZSAhPSBTUUxSZXN1bHREb25lKSB7Ci0gICAgICAgICAgICBM
T0dfRVJST1IoIkVycm9yIGZldGNoaW5nIGluZGV4IElEIHJlY29yZHMgZm9yIG9iamVjdCBzdG9y
ZSBpZCAlbGxpIGZyb20gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSUQs
IG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgLy8gRGVsZXRlIGFsbCBhc3NvY2lhdGVkIEluZGV4ZXMKKyAgICB7CisgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiREVMRVRFIEZST00gSW5k
ZXhJbmZvIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/OyIpKTsKKyAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgb2Jq
ZWN0U3RvcmVJRCkgIT0gU1FMUmVzdWx0T2sKKyAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMUmVzdWx0RG9uZSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVsZXRl
IGluZGV4IGZyb20gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RF
cnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KLQotICAgICAgICBmb3IgKGF1dG8gaW5kZXhJRCA6IGluZGV4SURz
KSB7Ci0gICAgICAgICAgICBpZiAoIWRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
b2JqZWN0U3RvcmVJRCwgaW5kZXhJRCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9CiAgICAgfQogCisgICAgLy8gRGVsZXRlIGFsbCBhc3NvY2lhdGVkIEluZGV4IHJl
Y29yZHMKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBFeGVjdXRlIFNRTCBoZXJlIHRvIGRyb3Ag
YWxsIHJlY29yZHMgcmVsYXRlZCB0byB0aGlzIG9iamVjdCBzdG9yZS4KKyAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBJbmRl
eFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID87IikpOworICAgICAgICBpZiAoc3FsLnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBv
YmplY3RTdG9yZUlEKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAh
PSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxl
dGUgaW5kZXggcmVjb3JkcyglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3OSw3ICs2MjcsMTcgQEAgYm9v
bCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZGVsZXRlSW5kZXgoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIEZJWE1FICg8
cmRhcjovL3Byb2JsZW0vMTU5MDUyOTM+KSAtIE9uY2Ugd2Ugc3RvcmUgcmVjb3JkcyBhZ2FpbnN0
IGluZGV4ZXMsIGRlbGV0ZSB0aGVtIGhlcmUuCisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEluZGV4UmVjb3Jk
cyBXSEVSRSBpbmRleElEID0gPyBBTkQgb2JqZWN0U3RvcmVJRCA9ID87IikpOworICAgICAgICBp
ZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLmJpbmRJ
bnQ2NCgxLCBpbmRleElEKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3FsLmJpbmRJ
bnQ2NCgyLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3Fs
LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBkZWxldGUgaW5kZXggcmVjb3JkcyBmb3IgaW5kZXggaWQgJWxsaSBmcm9tIEluZGV4UmVj
b3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBpbmRleElELCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTY5OCw2ICs3NTYs
NDkgQEAgYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cHV0UmVjb3Jk
KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cHV0SW5kZXhSZWNvcmQoY29u
c3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5VmFsdWUsIGNvbnN0
IElEQktleURhdGEmIGluZGV4S2V5KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKKyAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkp
OworCisgICAgU1FMaXRlSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CisgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAh
dHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgeworICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQg
dG8gcHV0IGluZGV4IHJlY29yZCBpbnRvIGRhdGFiYXNlIHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQs
IGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGU6OlJlYWRPbmx5KSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBwdXQgaW5kZXgg
cmVjb3JkIGludG8gZGF0YWJhc2UgZHVyaW5nIHJlYWQtb25seSB0cmFuc2FjdGlvbiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gaW5k
ZXhLZXlCdWZmZXIgPSBzZXJpYWxpemVJREJLZXlEYXRhKGluZGV4S2V5KTsKKyAgICBpZiAoIWlu
ZGV4S2V5QnVmZmVyKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlcmlhbGl6ZSBp
bmRleCBrZXkgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWVCdWZmZXIgPSBz
ZXJpYWxpemVJREJLZXlEYXRhKGtleVZhbHVlKTsKKyAgICBpZiAoIXZhbHVlQnVmZmVyKSB7Cisg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUgdG8gYmUgc3Rv
cmVkIGluIHRoZSBkYXRhYmFzZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFs
KCJJTlNFUlQgSU5UTyBJbmRleFJlY29yZHMgVkFMVUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCks
ID8pOyIpKTsKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sKKyAgICAg
ICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgaW5kZXhJRCkgIT0gU1FMUmVzdWx0T2sKKyAgICAg
ICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMiwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMUmVzdWx0T2sK
KyAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigzLCBpbmRleEtleUJ1ZmZlci0+ZGF0YSgpLCBp
bmRleEtleUJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxSZXN1bHRPaworICAgICAgICAgICAgfHwgc3Fs
LmJpbmRCbG9iKDQsIHZhbHVlQnVmZmVyLT5kYXRhKCksIHZhbHVlQnVmZmVyLT5zaXplKCkpICE9
IFNRTFJlc3VsdE9rCisgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTFJlc3VsdERvbmUp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCBpbmRleCByZWNvcmQgZm9y
IGluZGV4ICVsbGkgaW4gb2JqZWN0IHN0b3JlICVsbGkgaW4gUmVjb3JkcyB0YWJsZSAoJWkpIC0g
JXMiLCBpbmRleElELCBvYmplY3RTdG9yZUlELCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmdldEtleVJlY29yZEZyb21PYmplY3RTdG9yZShjb25z
dCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgY29uc3QgSURCS2V5JiBrZXksIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiByZXN1bHQpCiB7
CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tp
bmdTdG9yZVNRTGl0ZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaAppbmRleCAyZmZi
ZTQ4Li43NDJlMGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmgKQEAgLTczLDYgKzczLDggQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoY29uc3QgSURCSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNv
bnN0IFdlYkNvcmU6OklEQktleSYsIGJvb2wmIGtleUV4aXN0cykgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBib29sIHB1dFJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5JiwgY29u
c3QgdWludDhfdCogdmFsdWVCdWZmZXIsIHNpemVfdCB2YWx1ZVNpemUpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgYm9vbCBwdXRJbmRleFJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBj
b25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5
RGF0YSYgaW5kZXhLZXkpIG92ZXJyaWRlOworCiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5UmVj
b3JkRnJvbU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXkmLCBSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYgcmVzdWx0KSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0S2V5UmFuZ2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdl
YkNvcmU6OklEQktleVJhbmdlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIHJlc3Vs
dCwgUmVmUHRyPFdlYkNvcmU6OklEQktleT4mIHJlc3VsdEtleSkgb3ZlcnJpZGU7Cg==
</data>
<flag name="review"
          id="246818"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="246819"
          type_id="3"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222877</attachid>
            <date>2014-02-01 00:15:00 -0800</date>
            <delta_ts>2014-02-01 10:48:33 -0800</delta_ts>
            <desc>Reading patch v1 - Implement with a cursor!</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7388</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5OGJlOWRkLi5mZDdkODkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTQtMDItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElEQjogSW5kZXggcmVhZGluZworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU4OTk5NzM+
IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VW5pcXVlSURCRGF0YWJhc2U6OmdldFJlY29yZEZyb21CYWNraW5nU3RvcmUpOgorCisgICAgICAg
ICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZS5oOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VW5pcXVl
SURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmdldEluZGV4UmVjb3JkKTogVXNpbmcgYW4g
aW5kZXggY3Vyc29yLCByZWFkIGEgdmFsdWUuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaDoKKwog
MjAxNC0wMS0zMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
SURCOiBJbmRleCBjdXJzb3IgY29tcGxldGUgYWR2YW5jZSgpIGFuZCBpdGVyYXRlKCkgc3VwcG9y
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9V
bmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5k
ZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBjMjFlNTFlLi5jODRlMDQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlE
QkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtODcwLDggKzg3MCwxMyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgY29uc3QgSURCSQogCiAgICAgLy8gSURCSW5kZXggZ2V0IHJlY29yZAogCi0gICAgLy8gRklY
TUU6IEltcGxlbWVudCBpbmRleCBnZXRzICg8cmRhcjovL3Byb2JsZW0vMTU3Nzk2NDI+KQotICAg
IHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rhc2soKnRoaXMsICZVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJHZXRSZXN1
bHQoKSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCIn
Z2V0JyBmcm9tIGluZGV4ZXMgbm90IHN1cHBvcnRlZCB5ZXQiKSkpOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IHJlc3VsdDsKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5nZXRJbmRleFJlY29y
ZCh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgaW5kZXhJRCwga2V5UmFuZ2VE
YXRhLCByZXN1bHQpKSB7CisgICAgICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVBc3luY1Rh
c2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9y
ZSwgcmVxdWVzdElELCBJREJHZXRSZXN1bHQoKSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZ2V0IGluZGV4IHJlY29yZCBmcm9tIGJh
Y2tpbmcgc3RvcmUiKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcG9zdE1haW5U
aHJlYWRUYXNrKGNyZWF0ZUFzeW5jVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRH
ZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQkdldFJlc3VsdChyZXN1bHQu
cmVsZWFzZSgpKSwgMCwgU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7CiB9CiAKIHZvaWQg
VW5pcXVlSURCRGF0YWJhc2U6OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCwgdWludDMyX3QgZXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmUuaAppbmRleCAwY2EwZmNmLi42OGFhYTUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZS5oCkBAIC02OSw2ICs2OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwg
Y29uc3QgV2ViQ29yZTo6SURCS2V5JiwgYm9vbCYga2V5RXhpc3RzKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIHB1dFJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5JiwgY29uc3Qg
dWludDhfdCogdmFsdWVCdWZmZXIsIHNpemVfdCB2YWx1ZVNpemUpID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgcHV0SW5kZXhSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgV2Vi
Q29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGluZGV4S2V5KSA9
IDA7CisgICAgdmlydHVhbCBib29sIGdldEluZGV4UmVjb3JkKGNvbnN0IElEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGlu
ZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYsIFJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+JiByZXN1bHQpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlSZWNv
cmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleSYsIFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1bHQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0S2V5UmFuZ2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6
OklEQktleVJhbmdlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIHJlc3VsdCwgUmVm
UHRyPFdlYkNvcmU6OklEQktleT4mIHJlc3VsdEtleSkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3Bw
CmluZGV4IDZlODBiMTYuLjE1N2YwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAKQEAgLTgwOCw2
ICs4MDgsMzUgQEAgYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cHV0
SW5kZXhSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0SW5kZXhSZWNv
cmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9i
amVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlS
YW5nZURhdGEsIFJlZlB0cjxTaGFyZWRCdWZmZXI+JiByZXN1bHQpCit7CisgICAgQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fc3FsaXRlREIpOworICAgIEFTU0VSVChtX3Nx
bGl0ZURCLT5pc09wZW4oKSk7CisKKyAgICBTUUxpdGVJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKKyAgICBpZiAo
IXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgIExP
R19FUlJPUigiQXR0ZW1wdCB0byBnZXQgY291bnQgZnJvbSBkYXRhYmFzZSB3aXRob3V0IGFuIGVz
dGFibGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgU1FMaXRlSURCQ3Vyc29yKiBjdXJzb3IgPSB0cmFuc2FjdGlvbi0+
b3BlbkN1cnNvcihvYmplY3RTdG9yZUlELCBpbmRleElELCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbjo6TmV4dCwgSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlBbmRWYWx1ZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpOb3JtYWxUYXNrLCBrZXlSYW5nZURhdGEpOworCisgICAgaWYgKCFjdXJzb3Ip
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDYW5ub3Qgb3BlbiBjdXJzb3IgdG8gcGVyZm9ybSBpbmRl
eCBnZXQgaW4gZGF0YWJhc2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IG1fY3Vyc29ycy5zZXQoY3Vyc29yLT5pZGVudGlmaWVyKCksIGN1cnNvcik7CisKKyAgICByZXN1
bHQgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjdXJzb3ItPmN1cnJlbnRWYWx1ZUJ1ZmZlcigpLmRh
dGEoKSwgY3Vyc29yLT5jdXJyZW50VmFsdWVCdWZmZXIoKS5zaXplKCkpOworCisgICAgdHJhbnNh
Y3Rpb24tPmNsb3NlQ3Vyc29yKCpjdXJzb3IpOworCisgICAgcmV0dXJuIHRydWU7CisKK30KKwog
Ym9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0S2V5UmVjb3JkRnJv
bU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
aW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXkmIGtleSwgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZS5oCmluZGV4IDgyODBkYjIuLjE0MThhNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaApAQCAtNzQs
NyArNzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3Rv
cmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9i
amVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleSYsIGJvb2wmIGtleUV4aXN0cykgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIHB1dFJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5JiwgY29uc3QgdWludDhfdCogdmFsdWVCdWZmZXIsIHNpemVfdCB2YWx1ZVNpemUp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleFJlY29yZChjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50
NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBrZXlWYWx1ZSwgY29uc3Qg
V2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXkpIG92ZXJyaWRlOwotCisgICAgdmlydHVhbCBi
b29sIGdldEluZGV4UmVjb3JkKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNv
cmU6OklEQktleVJhbmdlRGF0YSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1
bHQpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGdldEtleVJlY29yZEZyb21PYmplY3RT
dG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5JiwgUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4mIHJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGdldEtleVJh
bmdlUmVjb3JkRnJvbU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9u
SWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXlS
YW5nZSYsIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1bHQsIFJlZlB0cjxXZWJD
b3JlOjpJREJLZXk+JiByZXN1bHRLZXkpIG92ZXJyaWRlOwo=
</data>
<flag name="review"
          id="246903"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
      

    </bug>

</bugzilla>