<?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>20068</bug_id>
          
          <creation_ts>2008-07-16 17:52:02 -0700</creation_ts>
          <short_desc>adding animation property support to RenderStyle</short_desc>
          <delta_ts>2008-08-05 12:09:11 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>19938</dependson>
          <blocked>19028</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>86134</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-16 17:52:02 -0700</bug_when>
    <thetext>RenderStyle and its Transition class needs to be extended to support the animation properties:
- direction
- iterationCount
- playState
- name

This patch adds these properties, but doesn&apos;t actually set them (ie. does not implement the CSS parsing part).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86135</commentid>
    <comment_count>1</comment_count>
      <attachid>22327</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-16 17:53:15 -0700</bug_when>
    <thetext>Created attachment 22327
adds animation properties into RenderStyle and Transition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86772</commentid>
    <comment_count>2</comment_count>
      <attachid>22327</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-07-23 13:53:11 -0700</bug_when>
    <thetext>Comment on attachment 22327
adds animation properties into RenderStyle and Transition

-    setStyle(style);
+    if (style)
+        setStyle(style);

setAnimatableStyle should never be called with a null style.   This smacks of working around some other problem.  If you have a test case where a null style was set, then we should be debugging how that happened and stop it rather than throwing in an unnecessary null check.

I think &quot;Transition&quot; could ultimately be split up into multiple classes (it seems gross to have all the animation and transition properties together in a single class that is still called &quot;Transition&quot;).  I think this could be done later though.

Keyframes are all wrong, but I have promised to look the other way for this initial landing.

EAnimPlayState is only 2 bits so could really be part of the &quot;isSet&quot; bitfield properties if you moved it to after the keyframe list and made it into:

unsigned m_playState : 2;

(unsigned for Windows compiler&apos;s benefit)

That would save a bit of memory.

r=me without making these changes, but I&apos;d like to see the null check removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86774</commentid>
    <comment_count>3</comment_count>
      <attachid>22327</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-07-23 13:58:51 -0700</bug_when>
    <thetext>Comment on attachment 22327
adds animation properties into RenderStyle and Transition

Oh I also forgot that KeyframeList needs to be updated to the new refcounting model (with a create function).  That&apos;s probably enough to tip this over into needing a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86777</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-23 14:02:08 -0700</bug_when>
    <thetext>Filed bug 20148 on fixing keyframes to not live in RenderStyle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86780</commentid>
    <comment_count>5</comment_count>
      <attachid>22327</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-07-23 14:11:41 -0700</bug_when>
    <thetext>Comment on attachment 22327
adds animation properties into RenderStyle and Transition

Ok, r=me assuming cleanup is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86983</commentid>
    <comment_count>6</comment_count>
      <attachid>22489</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-25 18:08:59 -0700</bug_when>
    <thetext>Created attachment 22489
updated patch

Updated patch with review fixes. It won&apos;t be committed until a blocking patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87508</commentid>
    <comment_count>7</comment_count>
      <attachid>22579</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-31 10:45:32 -0700</bug_when>
    <thetext>Created attachment 22579
Second update to patch

Second update to patch. Hyatt already gave a review+. This is waiting on the blocking bug before it can be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87880</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-08-05 12:09:11 -0700</bug_when>
    <thetext>Committed r35568
	M	WebCore/rendering/style/RenderStyle.cpp
	M	WebCore/rendering/style/RenderStyle.h
	M	WebCore/ChangeLog
	M	WebCore/css/CSSStyleSelector.cpp
	M	WebCore/css/CSSComputedStyleDeclaration.cpp
	M	WebCore/page/AnimationController.cpp

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22327</attachid>
            <date>2008-07-16 17:53:15 -0700</date>
            <delta_ts>2008-07-25 18:08:59 -0700</delta_ts>
            <desc>adds animation properties into RenderStyle and Transition</desc>
            <filename>patch5-renderstyle-animation-attributes.patch</filename>
            <type>text/plain</type>
            <size>26510</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGIxNTdh
ZWMuLjc4ODIyZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtMTA2OCw3ICsxMDY4LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodC0+
ZGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5KCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUykpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRp
b246IHsKQEAgLTEwNzksNyArMTA3OSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAg
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHQt
PmR1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsRHVyYXRpb24oKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJl
bGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvblRpbWluZ0Z1bmN0aW9uOiB7CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUo
aW50IHByb3BlcgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0ZiA9IFJlbmRl
clN0eWxlOjppbml0aWFsVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1
bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1RpbWluZ0Z1bmN0aW9u
VmFsdWU6OmNyZWF0ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCmluZGV4IDgyZTM1YzcuLjdmMzU3NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgaWYgKGlzSW5oZXJpdCkgeyBcCiB9IFwKIGlmIChp
c0luaXRpYWwpIHsgXAogICAgIFRyYW5zaXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vz
c1RyYW5zaXRpb25zKCk7IFwKLSAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6
aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxl
Ojppbml0aWFsQW5pbWF0aW9uIyNQcm9wKCkpOyBcCiAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJy
Q2hpbGQtPm5leHQoKTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkg
XAogICAgICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKICAgICByZXR1cm47IFwKQEAg
LTQ5OTEsNyArNDk5MSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFlQb3NpdGlv
bihGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hcER1cmF0aW9uKFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkK
IHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElB
TCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlh
bER1cmF0aW9uKCkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihSZW5kZXJTdHls
ZTo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC01MDA4LDcgKzUwMDgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcER1cmF0aW9u
KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwRGVsYXkoVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklU
SUFMKSB7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KFJlbmRlclN0eWxlOjppbml0aWFs
RGVsYXkoKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KFJlbmRlclN0eWxlOjppbml0
aWFsQW5pbWF0aW9uRGVsYXkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUwMjYs
NyArNTAyNiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRGVsYXkoVHJhbnNpdGlvbiog
dHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBU
aW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7
CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwp
IHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6Omlu
aXRpYWxUaW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVu
Y3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTUwNjEsNyArNTA2MSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWFwVGltaW5nRnVuY3Rpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwg
Q1NTVmFsdWUqIHZhbHVlCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFByb3BlcnR5KFRyYW5z
aXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNz
c1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0
aW9uLT5zZXRQcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpOworICAgICAg
ICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvblBy
b3BlcnR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAppbmRleCAxYjA3OGRlLi41ZDNjZTU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKQEAgLTIxNTMsNyArMjE1Myw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRh
YmxlU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIGlmICghaXNUZXh0KCkgJiYgbV9zdHls
ZSAmJiBzdHlsZSkKICAgICAgICAgc3R5bGUgPSBhbmltYXRpb24oKS0+dXBkYXRlQW5pbWF0aW9u
cyh0aGlzLCBzdHlsZSk7CiAKLSAgICBzZXRTdHlsZShzdHlsZSk7CisgICAgaWYgKHN0eWxlKQor
ICAgICAgICBzZXRTdHlsZShzdHlsZSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHls
ZShSZW5kZXJTdHlsZSogc3R5bGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAKaW5kZXggNTY0NzU5OS4uNDJkYjA0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcApAQCAtNjY0LDI5ICs2NjQsOTIgQEAgVHJhbnNmb3JtT3BlcmF0aW9uKiBNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRiArIChtX2YgLSBm
cm9tRikgKiBwcm9ncmVzcyk7CiB9CiAKK2Jvb2wgS2V5ZnJhbWVMaXN0OjpvcGVyYXRvcj09KGNv
bnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3QKK3sKKyAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgp
ICE9IG8ubV9rZXlmcmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gby5tX2tl
eWZyYW1lcy5iZWdpbigpOyAgICAKKyAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29u
c3RfaXRlcmF0b3IgaXQxID0gbV9rZXlmcmFtZXMuYmVnaW4oKTsgaXQxICE9IG1fa2V5ZnJhbWVz
LmVuZCgpOyArK2l0MSkgeworICAgICAgICBpZiAoaXQxLT5rZXkgIT0gaXQyLT5rZXkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTEg
PSBpdDEtPnN0eWxlOworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUyID0gaXQyLT5z
dHlsZTsKKyAgICAgICAgaWYgKCEoc3R5bGUxID09IHN0eWxlMikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICsraXQyOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZAorS2V5ZnJhbWVMaXN0OjppbnNlcnQoZmxvYXQgaW5LZXksIGNvbnN0IFJlbmRl
clN0eWxlJiBpblN0eWxlKQoreworICAgIGlmIChpbktleSA8IDAgfHwgaW5LZXkgPiAxKQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlm
cmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fa2V5ZnJhbWVzW2ldLmtleSA9PSBp
bktleSkgeworICAgICAgICAgICAgbV9rZXlmcmFtZXNbaV0uc3R5bGUgPSBpblN0eWxlOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX2tleWZyYW1lc1tpXS5r
ZXkgPiBpbktleSkgeworICAgICAgICAgICAgLy8gaW5zZXJ0IGJlZm9yZQorICAgICAgICAgICAg
bV9rZXlmcmFtZXMuaW5zZXJ0KGksIEtleWZyYW1lVmFsdWUoKSk7CisgICAgICAgICAgICBtX2tl
eWZyYW1lc1tpXS5rZXkgPSBpbktleTsKKyAgICAgICAgICAgIG1fa2V5ZnJhbWVzW2ldLnN0eWxl
ID0gaW5TdHlsZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAvLyBhcHBlbmQKKyAgICBtX2tleWZyYW1lcy5hcHBlbmQoS2V5ZnJhbWVWYWx1ZSgpKTsK
KyAgICBtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCktMV0ua2V5ID0gaW5LZXk7CisgICAg
bV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6ZSgpLTFdLnN0eWxlID0gaW5TdHlsZTsKK30KKwog
VHJhbnNpdGlvbjo6VHJhbnNpdGlvbigpCi0gICAgOiBtX2R1cmF0aW9uKFJlbmRlclN0eWxlOjpp
bml0aWFsRHVyYXRpb24oKSkKLSAgICAsIG1fdGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6Omlu
aXRpYWxUaW1pbmdGdW5jdGlvbigpKQotICAgICwgbV9kZWxheShSZW5kZXJTdHlsZTo6aW5pdGlh
bERlbGF5KCkpCi0gICAgLCBtX3Byb3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsUHJvcGVydHko
KSkKLSAgICAsIG1fZHVyYXRpb25TZXQoZmFsc2UpCi0gICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0
KGZhbHNlKQorICAgIDogbV9kZWxheShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5
KCkpCisgICAgLCBtX2RpcmVjdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRpcmVj
dGlvbigpKQorICAgICwgbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkR1
cmF0aW9uKCkpCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50KFJlbmRlclN0eWxlOjppbml0aWFsQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQoKSkKKyAgICAsIG1fbmFtZShSZW5kZXJTdHlsZTo6aW5pdGlh
bEFuaW1hdGlvbk5hbWUoKSkKKyAgICAsIG1fcGxheVN0YXRlKFJlbmRlclN0eWxlOjppbml0aWFs
QW5pbWF0aW9uUGxheVN0YXRlKCkpCisgICAgLCBtX3Byb3BlcnR5KFJlbmRlclN0eWxlOjppbml0
aWFsQW5pbWF0aW9uUHJvcGVydHkoKSkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5
bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKQogICAgICwgbV9kZWxheVNldChm
YWxzZSkKKyAgICAsIG1fZGlyZWN0aW9uU2V0KGZhbHNlKQorICAgICwgbV9kdXJhdGlvblNldChm
YWxzZSkKKyAgICAsIG1faXRlcmF0aW9uQ291bnRTZXQoZmFsc2UpCisgICAgLCBtX25hbWVTZXQo
ZmFsc2UpCisgICAgLCBtX3BsYXlTdGF0ZVNldChmYWxzZSkKICAgICAsIG1fcHJvcGVydHlTZXQo
ZmFsc2UpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0KGZhbHNlKQorICAgICwgbV9pc05vbmUo
ZmFsc2UpCiAgICAgLCBtX25leHQoMCkKIHsKIH0KIAogVHJhbnNpdGlvbjo6VHJhbnNpdGlvbihj
b25zdCBUcmFuc2l0aW9uJiBvKQogICAgIDogUmVmQ291bnRlZDxUcmFuc2l0aW9uPigpCi0gICAg
LCBtX2R1cmF0aW9uKG8ubV9kdXJhdGlvbikKLSAgICAsIG1fdGltaW5nRnVuY3Rpb24oby5tX3Rp
bWluZ0Z1bmN0aW9uKQogICAgICwgbV9kZWxheShvLm1fZGVsYXkpCisgICAgLCBtX2RpcmVjdGlv
bihvLm1fZGlyZWN0aW9uKQorICAgICwgbV9kdXJhdGlvbihvLm1fZHVyYXRpb24pCisgICAgLCBt
X2l0ZXJhdGlvbkNvdW50KG8ubV9pdGVyYXRpb25Db3VudCkKKyAgICAsIG1fbmFtZShvLm1fbmFt
ZSkKKyAgICAsIG1fcGxheVN0YXRlKG8ubV9wbGF5U3RhdGUpCiAgICAgLCBtX3Byb3BlcnR5KG8u
bV9wcm9wZXJ0eSkKLSAgICAsIG1fZHVyYXRpb25TZXQoby5tX2R1cmF0aW9uU2V0KQotICAgICwg
bV90aW1pbmdGdW5jdGlvblNldChvLm1fdGltaW5nRnVuY3Rpb25TZXQpCisgICAgLCBtX3RpbWlu
Z0Z1bmN0aW9uKG8ubV90aW1pbmdGdW5jdGlvbikKICAgICAsIG1fZGVsYXlTZXQoby5tX2RlbGF5
U2V0KQorICAgICwgbV9kaXJlY3Rpb25TZXQoby5tX2RpcmVjdGlvblNldCkKKyAgICAsIG1fZHVy
YXRpb25TZXQoby5tX2R1cmF0aW9uU2V0KQorICAgICwgbV9pdGVyYXRpb25Db3VudFNldChvLm1f
aXRlcmF0aW9uQ291bnRTZXQpCisgICAgLCBtX25hbWVTZXQoby5tX25hbWVTZXQpCisgICAgLCBt
X3BsYXlTdGF0ZVNldChvLm1fcGxheVN0YXRlU2V0KQogICAgICwgbV9wcm9wZXJ0eVNldChvLm1f
cHJvcGVydHlTZXQpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0KG8ubV90aW1pbmdGdW5jdGlv
blNldCkKKyAgICAsIG1faXNOb25lKG8ubV9pc05vbmUpCiAgICAgLCBtX25leHQoby5tX25leHQg
PyBuZXcgVHJhbnNpdGlvbigqKG8ubV9uZXh0LmdldCgpKSkgOiAwKQogewogfQpAQCAtNjk4LDMz
ICs3NjEsNjIgQEAgVHJhbnNpdGlvbiYgVHJhbnNpdGlvbjo6b3BlcmF0b3I9KGNvbnN0IFRyYW5z
aXRpb24mIG8pCiAgICAgfQogCiAgICAgbV9kZWxheSA9IG8ubV9kZWxheTsKKyAgICBtX2RpcmVj
dGlvbiA9IG8ubV9kaXJlY3Rpb247CiAgICAgbV9kdXJhdGlvbiA9IG8ubV9kdXJhdGlvbjsKLSAg
ICBtX3RpbWluZ0Z1bmN0aW9uID0gby5tX3RpbWluZ0Z1bmN0aW9uOworICAgIG1faXRlcmF0aW9u
Q291bnQgPSBvLm1faXRlcmF0aW9uQ291bnQ7CisgICAgbV9uYW1lID0gby5tX25hbWU7CisgICAg
bV9wbGF5U3RhdGUgPSBvLm1fcGxheVN0YXRlOwogICAgIG1fcHJvcGVydHkgPSBvLm1fcHJvcGVy
dHk7CisgICAgbV90aW1pbmdGdW5jdGlvbiA9IG8ubV90aW1pbmdGdW5jdGlvbjsKIAogICAgIG1f
ZGVsYXlTZXQgPSBvLm1fZGVsYXlTZXQ7CisgICAgbV9kaXJlY3Rpb25TZXQgPSBvLm1fZGlyZWN0
aW9uU2V0OwogICAgIG1fZHVyYXRpb25TZXQgPSBvLm1fZHVyYXRpb25TZXQ7Ci0gICAgbV90aW1p
bmdGdW5jdGlvblNldCA9IG8ubV90aW1pbmdGdW5jdGlvblNldDsKKyAgICBtX2l0ZXJhdGlvbkNv
dW50U2V0ID0gby5tX2l0ZXJhdGlvbkNvdW50U2V0OworICAgIG1fbmFtZVNldCA9IG8ubV9uYW1l
U2V0OworICAgIG1fcGxheVN0YXRlU2V0ID0gby5tX3BsYXlTdGF0ZVNldDsKICAgICBtX3Byb3Bl
cnR5U2V0ID0gby5tX3Byb3BlcnR5U2V0OworICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPSBvLm1f
dGltaW5nRnVuY3Rpb25TZXQ7CisKKyAgICBtX2lzTm9uZSA9IG8ubV9pc05vbmU7CiAKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgVHJhbnNpdGlvbjo6dHJhbnNpdGlvbnNNYXRjaChjb25z
dCBUcmFuc2l0aW9uKiBvKSBjb25zdAorYm9vbCBUcmFuc2l0aW9uOjp0cmFuc2l0aW9uc01hdGNo
KGNvbnN0IFRyYW5zaXRpb24qIG8sIGJvb2wgbWF0Y2hQbGF5U3RhdGVzIC8qID0gdHJ1ZSAqLykg
Y29uc3QKIHsKICAgICBpZiAoIW8pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBi
b29sIHJlc3VsdCA9IG1fZHVyYXRpb24gPT0gby0+bV9kdXJhdGlvbiAmJgotICAgICAgICAgICAg
ICAgICAgbV90aW1pbmdGdW5jdGlvbiA9PSBvLT5tX3RpbWluZ0Z1bmN0aW9uICYmCi0gICAgICAg
ICAgICAgICAgICBtX2RlbGF5ID09IG8tPm1fZGVsYXkgJiYKKyAgICBib29sIHJlc3VsdCA9IG1f
ZGVsYXkgPT0gby0+bV9kZWxheSAmJgorICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb24gPT0g
by0+bV9kaXJlY3Rpb24gJiYKKyAgICAgICAgICAgICAgICAgIG1fZHVyYXRpb24gPT0gby0+bV9k
dXJhdGlvbiAmJgorICAgICAgICAgICAgICAgICAgbV9pdGVyYXRpb25Db3VudCA9PSBvLT5tX2l0
ZXJhdGlvbkNvdW50ICYmCisgICAgICAgICAgICAgICAgICBtX25hbWUgPT0gby0+bV9uYW1lICYm
CiAgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5ID09IG8tPm1fcHJvcGVydHkgJiYgCi0gICAg
ICAgICAgICAgICAgICBtX2R1cmF0aW9uU2V0ID09IG8tPm1fZHVyYXRpb25TZXQgJiYgCi0gICAg
ICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID09IG8tPm1fdGltaW5nRnVuY3Rpb25T
ZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uID09IG8tPm1fdGltaW5n
RnVuY3Rpb24gJiYKICAgICAgICAgICAgICAgICAgIG1fZGVsYXlTZXQgPT0gby0+bV9kZWxheVNl
dCAmJgotICAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eVNldCA9PSBvLT5tX3Byb3BlcnR5U2V0
OworICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb25TZXQgPT0gby0+bV9kaXJlY3Rpb25TZXQg
JiYKKyAgICAgICAgICAgICAgICAgIG1fZHVyYXRpb25TZXQgPT0gby0+bV9kdXJhdGlvblNldCAm
JgorICAgICAgICAgICAgICAgICAgbV9pdGVyYXRpb25Db3VudFNldCA9PSBvLT5tX2l0ZXJhdGlv
bkNvdW50U2V0ICYmCisgICAgICAgICAgICAgICAgICBtX25hbWVTZXQgPT0gby0+bV9uYW1lU2V0
ICYmIAorICAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eVNldCA9PSBvLT5tX3Byb3BlcnR5U2V0
ICYmCisgICAgICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID09IG8tPm1fdGltaW5n
RnVuY3Rpb25TZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1faXNOb25lID09IG8tPm1faXNOb25l
OworICAgIAorICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKG1hdGNoUGxheVN0YXRlcyAmJiAobV9wbGF5U3RhdGUgIT0gby0+bV9wbGF5U3RhdGUg
fHwgbV9wbGF5U3RhdGVTZXQgIT0gby0+bV9wbGF5U3RhdGVTZXQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgLy8gbm93IGNoZWNrIGtleWZyYW1lcworICAgIGlmICgobV9rZXlm
cmFtZUxpc3QuZ2V0KCkgJiYgIW8tPm1fa2V5ZnJhbWVMaXN0LmdldCgpKSB8fCAoIW1fa2V5ZnJh
bWVMaXN0LmdldCgpICYmIG8tPm1fa2V5ZnJhbWVMaXN0LmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghKG1fa2V5ZnJhbWVMaXN0LmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuICptX2tleWZyYW1lTGlzdCA9PSAqby0+bV9rZXlmcmFtZUxpc3Q7
CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2RlZmluZSBGSUxMX1VOU0VUX1BST1BF
UlRZKHRlc3QsIHByb3ApIFwKQEAgLTc0MiwxMCArODM0LDE0IEBAIHBhdHRlcm4gPSB0aGlzOyBc
CiB2b2lkIFRyYW5zaXRpb246OmZpbGxVbnNldFByb3BlcnRpZXMoKQogewogICAgIFRyYW5zaXRp
b24qIGN1cnI7Ci0gICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0R1cmF0aW9uU2V0LCBtX2R1cmF0
aW9uKTsKLSAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzVGltaW5nRnVuY3Rpb25TZXQsIG1fdGlt
aW5nRnVuY3Rpb24pOwogICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEZWxheVNldCwgbV9kZWxh
eSk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0RpcmVjdGlvblNldCwgbV9kaXJlY3Rpb24p
OworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEdXJhdGlvblNldCwgbV9kdXJhdGlvbik7Cisg
ICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0l0ZXJhdGlvbkNvdW50U2V0LCBtX2l0ZXJhdGlvbkNv
dW50KTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzTmFtZVNldCwgbV9uYW1lKTsKKyAgICBG
SUxMX1VOU0VUX1BST1BFUlRZKGlzUGxheVN0YXRlU2V0LCBtX3BsYXlTdGF0ZSk7CiAgICAgRklM
TF9VTlNFVF9QUk9QRVJUWShpc1Byb3BlcnR5U2V0LCBtX3Byb3BlcnR5KTsKKyAgICBGSUxMX1VO
U0VUX1BST1BFUlRZKGlzVGltaW5nRnVuY3Rpb25TZXQsIG1fdGltaW5nRnVuY3Rpb24pOwogfQog
CiBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCkK
QEAgLTc2MSw2ICs4NTcsNyBAQCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhKCkKICAgICAsIG1fYXBwZWFyYW5jZShSZW5kZXJTdHlsZTo6aW5pdGlh
bEFwcGVhcmFuY2UoKSkKICAgICAsIG1fYm9yZGVyRml0KFJlbmRlclN0eWxlOjppbml0aWFsQm9y
ZGVyRml0KCkpCiAgICAgLCBtX2JveFNoYWRvdygwKQorICAgICwgbV9hbmltYXRpb24oMCkKICAg
ICAsIG1fdHJhbnNpdGlvbigwKQogICAgICwgbV9tYXNrKEZpbGxMYXllcihNYXNrRmlsbExheWVy
KSkKICNpZiBFTkFCTEUoWEJMKQpAQCAtNzg4LDYgKzg4NSw3IEBAIFN0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGE6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEoY29uc3QgU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkCiAgICAgLCBtX2JvcmRlckZpdChvLm1fYm9yZGVyRml0KQogICAgICwgbV9ib3hTaGFk
b3coby5tX2JveFNoYWRvdyA/IG5ldyBTaGFkb3dEYXRhKCpvLm1fYm94U2hhZG93KSA6IDApCiAg
ICAgLCBtX2JveFJlZmxlY3Qoby5tX2JveFJlZmxlY3QpCisgICAgLCBtX2FuaW1hdGlvbihvLm1f
dHJhbnNpdGlvbiA/IG5ldyBUcmFuc2l0aW9uKCpvLm1fYW5pbWF0aW9uKSA6IDApCiAgICAgLCBt
X3RyYW5zaXRpb24oby5tX3RyYW5zaXRpb24gPyBuZXcgVHJhbnNpdGlvbigqby5tX3RyYW5zaXRp
b24pIDogMCkKICAgICAsIG1fbWFzayhvLm1fbWFzaykKICAgICAsIG1fbWFza0JveEltYWdlKG8u
bV9tYXNrQm94SW1hZ2UpCkBAIC04NDEsNiArOTM5LDcgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8p
IGMKICAgICAgICAgJiYgbV9ib3JkZXJGaXQgPT0gby5tX2JvcmRlckZpdAogICAgICAgICAmJiBz
aGFkb3dEYXRhRXF1aXZhbGVudChvKQogICAgICAgICAmJiByZWZsZWN0aW9uRGF0YUVxdWl2YWxl
bnQobykKKyAgICAgICAgJiYgYW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQobykKICAgICAgICAgJiYg
dHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KG8pCiAgICAgICAgICYmIG1fbWFzayA9PSBvLm1fbWFz
awogICAgICAgICAmJiBtX21hc2tCb3hJbWFnZSA9PSBvLm1fbWFza0JveEltYWdlCkBAIC04NzAs
NiArOTY5LDMzIEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6cmVmbGVjdGlvbkRh
dGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyCiAKIH0KIAordm9pZCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjp1cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5bGVTZWxlY3Rv
ciogc3R5bGVTZWxlY3RvcikKK3sKKyAgICBUcmFuc2l0aW9uKiBhbmltOworICAgIGZvciAoYW5p
bSA9IG1fdHJhbnNpdGlvbi5nZXQoKTsgYW5pbTsgYW5pbSA9IGFuaW0tPm5leHQoKSkgeworICAg
ICAgICBpZiAoIWFuaW0tPm5hbWUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIHdlIGRv
bid0IHJlYWxseSBzdXBwb3J0IGtleWZyYW1lcyBmb3IgdHJhbnNpdGlvbnMgeWV0CisgICAgICAg
ICAgICAvL1JlZlB0cjxLZXlmcmFtZUxpc3Q+IGtleWZyYW1lID0gc3R5bGVTZWxlY3Rvci0+Zmlu
ZEtleWZyYW1lUnVsZShhbmltLT5uYW1lKCkpOworICAgICAgICAgICAgLy9hbmltLT5zZXRBbmlt
YXRpb25LZXlmcmFtZShrZXlmcmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChhbmlt
ID0gbV9hbmltYXRpb24uZ2V0KCk7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkpIHsKKyAgICAg
ICAgaWYgKGFuaW0tPmlzVmFsaWRBbmltYXRpb24oKSkgeworICAgICAgICAgICAgLy9SZWZQdHI8
S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSA9IHN0eWxlU2VsZWN0b3ItPmZpbmRLZXlmcmFtZVJ1bGUo
YW5pbS0+bmFtZSgpKTsKKyAgICAgICAgICAgIC8vYW5pbS0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUo
a2V5ZnJhbWUpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFN0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGE6OmFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGEmIG8pIGNvbnN0Cit7CisgICAgaWYgKCFtX2FuaW1hdGlvbiAmJiBvLm1fYW5pbWF0
aW9uIHx8IG1fYW5pbWF0aW9uICYmICFvLm1fYW5pbWF0aW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fYW5pbWF0aW9uICYmIG8ubV9hbmltYXRpb24gJiYgKCptX2FuaW1hdGlv
biAhPSAqby5tX2FuaW1hdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp0cmFuc2l0aW9uRGF0
YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKIHsK
ICAgICBpZiAoIW1fdHJhbnNpdGlvbiAmJiBvLm1fdHJhbnNpdGlvbiB8fCBtX3RyYW5zaXRpb24g
JiYgIW8ubV90cmFuc2l0aW9uKQpAQCAtMTg0NCw2ICsxOTcwLDMzIEBAIGNvbnN0IFZlY3RvcjxT
dHlsZURhc2hib2FyZFJlZ2lvbj4mIFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygp
CiB9CiAjZW5kaWYKIAordm9pZCBSZW5kZXJTdHlsZTo6YWRqdXN0QW5pbWF0aW9ucygpCit7Cisg
ICAgaWYgKGFuaW1hdGlvbnMoKSkgeworICAgICAgICBpZiAoYW5pbWF0aW9ucygpLT5pc0VtcHR5
T3JaZXJvRHVyYXRpb24oKSkgeworICAgICAgICAgICAgY2xlYXJBbmltYXRpb25zKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBnZXQgcmlkIG9mIGFueSB0
cmFpbGluZyBlbXB0eSBhbmltYXRpb25zCisgICAgICAgIFRyYW5zaXRpb24qIG5leHQ7CisgICAg
ICAgIGZvciAoVHJhbnNpdGlvbiogcCA9IGFjY2Vzc0FuaW1hdGlvbnMoKTsgcDsgcCA9IG5leHQp
IHsKKyAgICAgICAgICAgIG5leHQgPSBwLT5uZXh0KCk7CisgICAgICAgICAgICBpZiAobmV4dCAm
JiBuZXh0LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBwLT5zZXROZXh0KDApOyAvLyBy
ZW1vdmVzIHRoZSByZWYsIHNvIG5leHQgZ2V0cyBkZWxldGVkCisgICAgICAgICAgICAgICAgbmV4
dCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIWFuaW1hdGlvbnMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBSZXBlYXQgcGF0dGVybnMgaW50byBsYXllcnMgdGhhdCBkb24ndCBoYXZlIHNvbWUg
cHJvcGVydGllcyBzZXQuCisgICAgICAgIGFjY2Vzc0FuaW1hdGlvbnMoKS0+ZmlsbFVuc2V0UHJv
cGVydGllcygpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJTdHlsZTo6YWRqdXN0VHJhbnNpdGlv
bnMoKQogewogICAgIGlmICh0cmFuc2l0aW9ucygpKSB7CkBAIC0xODkzLDYgKzIwNDYsMTQgQEAg
dm9pZCBSZW5kZXJTdHlsZTo6YWRqdXN0VHJhbnNpdGlvbnMoKQogICAgIH0KIH0KIAorVHJhbnNp
dGlvbiogUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMoKQoreworICAgIFRyYW5zaXRpb24q
IGxheWVyID0gcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9uLmdldCgp
OworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2Vzcygp
LT5tX2FuaW1hdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCk7CisgICAgcmV0dXJuIHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX2FuaW1hdGlvbi5nZXQoKTsKK30KKwogVHJhbnNpdGlvbiogUmVuZGVyU3R5
bGU6OmFjY2Vzc1RyYW5zaXRpb25zKCkKIHsKICAgICBUcmFuc2l0aW9uKiBsYXllciA9IHJhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24uZ2V0KCk7CkBAIC0xOTAxLDQg
KzIwNjIsMTQgQEAgVHJhbnNpdGlvbiogUmVuZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRpb25zKCkK
ICAgICByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbi5nZXQoKTsKIH0K
IAorY29uc3QgVHJhbnNpdGlvbiogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShp
bnQgcHJvcGVydHkpCit7CisgICAgZm9yIChjb25zdCBUcmFuc2l0aW9uKiBwID0gdHJhbnNpdGlv
bnMoKTsgcDsgcCA9IHAtPm5leHQoKSkgeworICAgICAgICBpZiAocC0+cHJvcGVydHkoKSA9PSBj
QW5pbWF0ZUFsbCB8fCBwLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5KSB7CisgICAgICAgICAgICBy
ZXR1cm4gcDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggYmUyOWZiYy4uNmQzMWUxYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC03Miw2ICs3Miw3IEBAIGNsYXNzIENT
U1ZhbHVlTGlzdDsKIGNsYXNzIENhY2hlZEltYWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBj
bGFzcyBDdXJzb3JMaXN0OworY2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgUGFpcjsKIGNsYXNz
IFJlbmRlckFyZW5hOwogY2xhc3MgU2hhZG93VmFsdWU7CkBAIC0xMjU3LDYgKzEyNTgsOCBAQCBw
cml2YXRlOgogICAgIGRvdWJsZSBtX3kyOwogfTsKIAorZW51bSBFQW5pbVBsYXlTdGF0ZSB7IEFu
aW1QbGF5U3RhdGVQbGF5aW5nLCBBbmltUGxheVN0YXRlUGF1c2VkIH07CisKIGNsYXNzIFRyYW5z
aXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2l0aW9uPiB7CiBwdWJsaWM6CiAgICAgVHJh
bnNpdGlvbigpOwpAQCAtMTI2NSwxMyArMTI2OCwyNCBAQCBwdWJsaWM6CiAgICAgVHJhbnNpdGlv
biogbmV4dCgpIHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQogCiAgICAgYm9vbCBpc0RlbGF5U2V0
KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheVNldDsgfQorICAgIGJvb2wgaXNEaXJlY3Rpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvblNldDsgfQogICAgIGJvb2wgaXNEdXJhdGlvblNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb25TZXQ7IH0KLSAgICBib29sIGlzVGltaW5nRnVu
Y3Rpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uU2V0OyB9CisgICAgYm9v
bCBpc0l0ZXJhdGlvbkNvdW50U2V0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25Db3VudFNl
dDsgfQorICAgIGJvb2wgaXNOYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2V0OyB9Cisg
ICAgYm9vbCBpc1BsYXlTdGF0ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlU2V0OyB9
CiAgICAgYm9vbCBpc1Byb3BlcnR5U2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVNldDsg
fQorICAgIGJvb2wgaXNUaW1pbmdGdW5jdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5n
RnVuY3Rpb25TZXQ7IH0KKworICAgIC8vIGlzIHRoZSBzcGVjaWFsICJub25lIiBhbmltYXRpb24g
KGFuaW1hdGlvbi1uYW1lOiBub25lKQorICAgIGJvb2wgaXNOb25lQW5pbWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9pc05vbmU7IH0KKyAgICAvLyB3ZSBjYW4gbWFrZSBwbGFjZWhvbGRlciBUcmFu
c2l0aW9uIG9iamVjdHMgdG8ga2VlcCB0aGUgY29tbWEtc2VwYXJhdGVkIGxpc3RzCisgICAgLy8g
b2YgcHJvcGVydGllcyBpbiBzeW5jLiBpc1ZhbGlkQW5pbWF0aW9uIG1lYW5zIHRoaXMgaXMgbm90
IGEgcGxhY2Vob2xkZXIuCisgICAgYm9vbCBpc1ZhbGlkQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1
cm4gIW1faXNOb25lICYmICFtX25hbWUuaXNFbXB0eSgpOyB9CiAKICAgICBib29sIGlzRW1wdHko
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICghbV9kdXJhdGlvblNldCAmJiAhbV9kZWxh
eVNldCAmJiAhbV90aW1pbmdGdW5jdGlvblNldCAmJiAhbV9wcm9wZXJ0eVNldCk7CisgICAgICAg
IHJldHVybiAoIW1fZGlyZWN0aW9uU2V0ICYmICFtX2R1cmF0aW9uU2V0ICYmICFtX25hbWVTZXQg
JiYgIW1fcGxheVN0YXRlU2V0ICYmIAorICAgICAgICAgICAgICAgIW1faXRlcmF0aW9uQ291bnRT
ZXQgJiYgIW1fZGVsYXlTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQgJiYgIW1fcHJvcGVydHlT
ZXQpOwogICAgIH0KIAogICAgIGJvb2wgaXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkgY29uc3QKQEAg
LTEyODAsMjcgKzEyOTQsNDUgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgY2xlYXJEZWxh
eSgpIHsgbV9kZWxheVNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhckRpcmVjdGlvbigpIHsg
bV9kaXJlY3Rpb25TZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJEdXJhdGlvbigpIHsgbV9k
dXJhdGlvblNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclRpbWluZ0Z1bmN0aW9uKCkgeyBt
X3RpbWluZ0Z1bmN0aW9uU2V0ID0gZmFsc2U7IH0KLQorICAgIHZvaWQgY2xlYXJJdGVyYXRpb25D
b3VudCgpIHsgbV9pdGVyYXRpb25Db3VudFNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhck5h
bWUoKSB7IG1fbmFtZVNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhclBsYXlTdGF0ZSgpIHsg
bV9wbGF5U3RhdGVTZXQgPSBBbmltUGxheVN0YXRlUGxheWluZzsgfQogICAgIHZvaWQgY2xlYXJQ
cm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhclRpbWlu
Z0Z1bmN0aW9uKCkgeyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gZmFsc2U7IH0KIAogICAgIGRvdWJs
ZSBkZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXk7IH0KKyAgICBib29sIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0aW1p
bmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb247IH0KKyAgICBpbnQg
aXRlcmF0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdGlvbkNvdW50OyB9CisgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgRUFuaW1Q
bGF5U3RhdGUgcGxheVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5U3RhdGU7IH0KICAgICBp
bnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisgICAgY29uc3QgVGlt
aW5nRnVuY3Rpb24mIHRpbWluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5j
dGlvbjsgfQorCisgICAgY29uc3QgUmVmUHRyPEtleWZyYW1lTGlzdD4mIGtleWZyYW1lTGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVMaXN0OyB9CiAKICAgICB2b2lkIHNldERlbGF5KGRv
dWJsZSBjKSB7IG1fZGVsYXkgPSBjOyBtX2RlbGF5U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0
RGlyZWN0aW9uKGJvb2wgZCkgeyBtX2RpcmVjdGlvbiA9IGQ7IG1fZGlyZWN0aW9uU2V0ID0gdHJ1
ZTsgfQogICAgIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlIGQpIHsgQVNTRVJUKGQgPj0gMCk7IG1f
ZHVyYXRpb24gPSBkOyBtX2R1cmF0aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0VGltaW5n
RnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24mIGYpIHsgbV90aW1pbmdGdW5jdGlvbiA9IGY7
IG1fdGltaW5nRnVuY3Rpb25TZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJdGVyYXRpb25Db3Vu
dChpbnQgYykgeyBtX2l0ZXJhdGlvbkNvdW50ID0gYzsgbV9pdGVyYXRpb25Db3VudFNldCA9IHRy
dWU7IH0KKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuKSB7IG1fbmFtZSA9IG47IG1f
bmFtZVNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNldFBsYXlTdGF0ZShFQW5pbVBsYXlTdGF0ZSBk
KSB7IG1fcGxheVN0YXRlID0gZDsgbV9wbGF5U3RhdGVTZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBz
ZXRQcm9wZXJ0eShpbnQgdCkgeyBtX3Byb3BlcnR5ID0gdDsgbV9wcm9wZXJ0eVNldCA9IHRydWU7
IH0KKyAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBmKSB7
IG1fdGltaW5nRnVuY3Rpb24gPSBmOyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gdHJ1ZTsgfQorCisg
ICAgdm9pZCBzZXRJc05vbmVBbmltYXRpb24oYm9vbCBuKSB7IG1faXNOb25lID0gbjsgfQorCiAg
ICAgdm9pZCBzZXROZXh0KFRyYW5zaXRpb24qIG4pIHsgaWYgKG1fbmV4dC5nZXQoKSAhPSBuKSB7
IG1fbmV4dCA9IG47IH0gfQogCisgICAgdm9pZCBzZXRBbmltYXRpb25LZXlmcmFtZShjb25zdCBS
ZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSkgIHsgbV9rZXlmcmFtZUxpc3QgPSBrZXlmcmFt
ZTsgfQorCiAgICAgVHJhbnNpdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFRyYW5zaXRpb24mIG8pOwog
ICAgIFRyYW5zaXRpb24oY29uc3QgVHJhbnNpdGlvbiYgbyk7CiAKICAgICAvLyByZXR1cm4gdHJ1
ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQot
ICAgIGJvb2wgdHJhbnNpdGlvbnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiB0KSBjb25zdDsKKyAg
ICBib29sIHRyYW5zaXRpb25zTWF0Y2goY29uc3QgVHJhbnNpdGlvbiogdCwgYm9vbCBtYXRjaFBs
YXlTdGF0ZXM9dHJ1ZSkgY29uc3Q7CiAKICAgICAvLyByZXR1cm4gdHJ1ZSBldmVyeSB0cmFuc2l0
aW9uIGluIHRoZSBjaGFpbiAoZGVmaW5lZCBieSBtX25leHQpIG1hdGNoIAogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdCB7IHJldHVybiB0cmFuc2l0aW9uc01h
dGNoKCZvKSAmJiAoKG1fbmV4dCAmJiBvLm1fbmV4dCkgPyAoKm1fbmV4dCA9PSAqby5tX25leHQp
IDogKG1fbmV4dCA9PSBvLm1fbmV4dCkpOyB9CkBAIC0xMzA5LDE1ICsxMzQxLDI3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGZpbGxVbnNldFByb3BlcnRpZXMoKTsKIAogcHJpdmF0ZToKLSAgICBkb3Vi
bGUgbV9kdXJhdGlvbjsKLSAgICBUaW1pbmdGdW5jdGlvbiBtX3RpbWluZ0Z1bmN0aW9uOwogICAg
IGRvdWJsZSBtX2RlbGF5OworICAgIGJvb2wgbV9kaXJlY3Rpb247CisgICAgZG91YmxlIG1fZHVy
YXRpb247CisgICAgaW50IG1faXRlcmF0aW9uQ291bnQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAg
ICBFQW5pbVBsYXlTdGF0ZSBtX3BsYXlTdGF0ZTsKICAgICBpbnQgbV9wcm9wZXJ0eTsKKyAgICBU
aW1pbmdGdW5jdGlvbiBtX3RpbWluZ0Z1bmN0aW9uOworCisgICAgUmVmUHRyPEtleWZyYW1lTGlz
dD4gbV9rZXlmcmFtZUxpc3Q7CiAKLSAgICBib29sIG1fZHVyYXRpb25TZXQgICAgICAgOiAxOwot
ICAgIGJvb2wgbV90aW1pbmdGdW5jdGlvblNldCA6IDE7CiAgICAgYm9vbCBtX2RlbGF5U2V0ICAg
ICAgICAgIDogMTsKKyAgICBib29sIG1fZGlyZWN0aW9uU2V0ICAgICAgOiAxOworICAgIGJvb2wg
bV9kdXJhdGlvblNldCAgICAgICA6IDE7CisgICAgYm9vbCBtX2l0ZXJhdGlvbkNvdW50U2V0IDog
MTsKKyAgICBib29sIG1fbmFtZVNldCAgICAgICAgICAgOiAxOworICAgIGJvb2wgbV9wbGF5U3Rh
dGVTZXQgICAgICA6IDE7CiAgICAgYm9vbCBtX3Byb3BlcnR5U2V0ICAgICAgIDogMTsKKyAgICBi
b29sIG1fdGltaW5nRnVuY3Rpb25TZXQgOiAxOworICAgIAorICAgIGJvb2wgbV9pc05vbmUgICAg
ICAgICAgICA6IDE7CiAgICAgCiAgICAgUmVmUHRyPFRyYW5zaXRpb24+IG1fbmV4dDsKIH07CkBA
IC0xMzczLDcgKzE0MTcsOSBAQCBwdWJsaWM6CiAgCiAgICAgYm9vbCBzaGFkb3dEYXRhRXF1aXZh
bGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29s
IHJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
JiBvKSBjb25zdDsKKyAgICBib29sIGFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKICAgICBib29sIHRyYW5zaXRpb25EYXRhRXF1
aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7CisgICAgdm9p
ZCB1cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rvcik7
CiAKICAgICBpbnQgbGluZUNsYW1wOyAvLyBBbiBBcHBsZSBleHRlbnNpb24uCiAjaWYgRU5BQkxF
KERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtMTQwMCw2ICsxNDQ2LDcgQEAgcHVibGljOgogICAgIAog
ICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IG1fYm94UmVmbGVjdDsKIAorICAgIFJlZlB0cjxU
cmFuc2l0aW9uPiBtX2FuaW1hdGlvbjsKICAgICBSZWZQdHI8VHJhbnNpdGlvbj4gbV90cmFuc2l0
aW9uOwogCiAgICAgRmlsbExheWVyIG1fbWFzazsKQEAgLTIwOTgsNyArMjE0NSwxMSBAQCBwdWJs
aWM6CiAgICAgLy8gRW5kIENTUzMgR2V0dGVycwogCiAgICAgLy8gQXBwbGUtc3BlY2lmaWMgcHJv
cGVydHkgZ2V0dGVyIG1ldGhvZHMKKyAgICBUcmFuc2l0aW9uKiBhY2Nlc3NBbmltYXRpb25zKCk7
CiAgICAgVHJhbnNpdGlvbiogYWNjZXNzVHJhbnNpdGlvbnMoKTsKKyAgICAvLyByZXR1cm4gdGhl
IGZpcnN0IGZvdW5kIFRyYW5zaXRpb24gKGluY2x1ZGluZyAnYWxsJyB0cmFuc2l0aW9ucykKKyAg
ICBjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uRm9yUHJvcGVydHkoaW50IHByb3BlcnR5KTsK
KyAgICBjb25zdCBUcmFuc2l0aW9uKiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5v
bkluaGVyaXRlZERhdGEtPm1fYW5pbWF0aW9uLmdldCgpOyB9CiAgICAgY29uc3QgVHJhbnNpdGlv
biogdHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90
cmFuc2l0aW9uLmdldCgpOyB9CiAgICAgaW50IGxpbmVDbGFtcCgpIGNvbnN0IHsgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5saW5lQ2xhbXA7IH0KICAgICBib29sIHRleHRTaXplQWRqdXN0
KCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTaXplQWRqdXN0OyB9CkBA
IC0yMzYzLDkgKzI0MTQsMTMgQEAgcHVibGljOgogICAgIC8vIEVuZCBDU1MzIFNldHRlcnMKICAg
IAogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3BlcnR5IHNldHRlcnMKKyAgICB2b2lkIGNsZWFy
QW5pbWF0aW9ucygpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9u
ID0gMDsgfQogICAgIHZvaWQgY2xlYXJUcmFuc2l0aW9ucygpIHsgcmFyZU5vbkluaGVyaXRlZERh
dGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IDA7IH0KKyAgICB2b2lkIGluaGVyaXRBbmltYXRp
b25zKGNvbnN0IFRyYW5zaXRpb24qIHBhcmVudCkgeyBjbGVhckFuaW1hdGlvbnMoKTsgaWYgKHBh
cmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9uID0gbmV3IFRy
YW5zaXRpb24oKnBhcmVudCk7IH0KICAgICB2b2lkIGluaGVyaXRUcmFuc2l0aW9ucyhjb25zdCBU
cmFuc2l0aW9uKiBwYXJlbnQpIHsgY2xlYXJUcmFuc2l0aW9ucygpOyBpZiAocGFyZW50KSByYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gbmV3IFRyYW5zaXRpb24o
KnBhcmVudCk7IH0KKyAgICB2b2lkIGFkanVzdEFuaW1hdGlvbnMoKTsKICAgICB2b2lkIGFkanVz
dFRyYW5zaXRpb25zKCk7CisgICAgdm9pZCB1cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5bGVT
ZWxlY3Rvciogc3R5bGVTZWxlY3RvcikgeyBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEuZ2V0KCkp
IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT51cGRhdGVLZXlmcmFtZXMoc3R5bGVTZWxl
Y3Rvcik7IH0KICAgICB2b2lkIHNldExpbmVDbGFtcChpbnQgYykgeyBTRVRfVkFSKHJhcmVOb25J
bmhlcml0ZWREYXRhLCBsaW5lQ2xhbXAsIGMpOyB9CiAgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVz
dChib29sIGIpIHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNpemVBZGp1c3QsIGIp
OyB9CiAgICAgdm9pZCBzZXRUZXh0U2VjdXJpdHkoRVRleHRTZWN1cml0eSBhVGV4dFNlY3VyaXR5
KSB7IFNFVF9WQVIocmFyZUluaGVyaXRlZERhdGEsIHRleHRTZWN1cml0eSwgYVRleHRTZWN1cml0
eSk7IH0gCkBAIC0yNTIyLDEwICsyNTc3LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTGVuZ3Ro
IGluaXRpYWxUcmFuc2Zvcm1PcmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBlcmNlbnQp
OyB9CiAgICAgCiAgICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgotICAgIHN0YXRpYyBmbG9h
dCBpbml0aWFsRGVsYXkoKSB7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIGRvdWJsZSBpbml0aWFs
RHVyYXRpb24oKSB7IHJldHVybiAwOyB9Ci0gICAgc3RhdGljIFRpbWluZ0Z1bmN0aW9uIGluaXRp
YWxUaW1pbmdGdW5jdGlvbigpIHsgcmV0dXJuIFRpbWluZ0Z1bmN0aW9uKCk7IH0KLSAgICBzdGF0
aWMgaW50IGluaXRpYWxQcm9wZXJ0eSgpIHsgcmV0dXJuIGNBbmltYXRlQWxsOyB9CisgICAgc3Rh
dGljIGZsb2F0IGluaXRpYWxBbmltYXRpb25EZWxheSgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0
aWMgYm9vbCBpbml0aWFsQW5pbWF0aW9uRGlyZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBzdGF0aWMgZG91YmxlIGluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0K
KyAgICBzdGF0aWMgaW50IGluaXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3VudCgpIHsgcmV0dXJu
IDE7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGluaXRpYWxBbmltYXRpb25OYW1lKCkgeyByZXR1cm4g
U3RyaW5nKCk7IH0KKyAgICBzdGF0aWMgRUFuaW1QbGF5U3RhdGUgaW5pdGlhbEFuaW1hdGlvblBs
YXlTdGF0ZSgpIHsgcmV0dXJuIEFuaW1QbGF5U3RhdGVQbGF5aW5nOyB9CisgICAgc3RhdGljIGlu
dCBpbml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSB7IHJldHVybiBjQW5pbWF0ZUFsbDsgfQorICAg
IHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKSB7
IHJldHVybiBUaW1pbmdGdW5jdGlvbigpOyB9CiAgICAgc3RhdGljIGludCBpbml0aWFsTGluZUNs
YW1wKCkgeyByZXR1cm4gLTE7IH0KICAgICBzdGF0aWMgYm9vbCBpbml0aWFsVGV4dFNpemVBZGp1
c3QoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIEVUZXh0U2VjdXJpdHkgaW5pdGlhbFRl
eHRTZWN1cml0eSgpIHsgcmV0dXJuIFRTTk9ORTsgfQpAQCAtMjUzNSw2ICsyNTk0LDQ1IEBAIHB1
YmxpYzoKICNlbmRpZgogfTsKIAorI3ByYWdtYSBtYXJrIC0KKworY2xhc3MgS2V5ZnJhbWVWYWx1
ZSB7CitwdWJsaWM6CisgICAgS2V5ZnJhbWVWYWx1ZSgpIDoga2V5KC0xKSB7IH0KKyAgICBmbG9h
dCBrZXk7CisgICAgUmVuZGVyU3R5bGUgc3R5bGU7Cit9OworCitjbGFzcyBLZXlmcmFtZUxpc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxLZXlmcmFtZUxpc3Q+IHsKK3B1YmxpYzoKKyAgICBLZXlmcmFt
ZUxpc3QoY29uc3QgQXRvbWljU3RyaW5nJiBpbkFuaW1OYW1lKQorICAgIDogbV9hbmltYXRpb25O
YW1lKGluQW5pbU5hbWUpCisgICAgeworICAgICAgICBpbnNlcnQoMCwgUmVuZGVyU3R5bGUoKSk7
IGluc2VydCgxLCBSZW5kZXJTdHlsZSgpKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtl
eWZyYW1lTGlzdCYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQorICAgIAorICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW9uTmFtZTsgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KGZsb2F0IGluS2V5LCBjb25zdCBS
ZW5kZXJTdHlsZSYgaW5TdHlsZSk7CisgICAgCisgICAgdm9pZCBhZGRQcm9wZXJ0eShpbnQgcHJv
cCkgeyBtX3Byb3BlcnRpZXMuYWRkKHByb3ApOyB9CisgICAgYm9vbCBjb250YWluc1Byb3BlcnR5
KGludCBwcm9wKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuY29udGFpbnMocHJvcCk7IH0K
KyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luUHJvcGVydGllcygpIHsgcmV0
dXJuIG1fcHJvcGVydGllcy5iZWdpbigpOyB9CisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVy
YXRvciBlbmRQcm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmVuZCgpOyB9CisgICAg
CisgICAgdm9pZCBjbGVhcigpIHsgbV9rZXlmcmFtZXMuY2xlYXIoKTsgbV9wcm9wZXJ0aWVzLmNs
ZWFyKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5p
c0VtcHR5KCk7IH0KKyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGJl
Z2luS2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuYmVnaW4oKTsgfQorICAg
IFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZW5kS2V5ZnJhbWVzKCkgY29u
c3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuZW5kKCk7IH0KKworcHJvdGVjdGVkOgorICAgIEF0b21p
Y1N0cmluZyBtX2FuaW1hdGlvbk5hbWU7CisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+IG1fa2V5
ZnJhbWVzOworICAgIEhhc2hTZXQ8aW50PiBtX3Byb3BlcnRpZXM7ICAgICAgIC8vIHRoZSBwcm9w
ZXJ0aWVzIGJlaW5nIGFuaW1hdGVkCit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgo=
</data>
<flag name="review"
          id="9833"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22489</attachid>
            <date>2008-07-25 18:08:59 -0700</date>
            <delta_ts>2008-07-31 10:45:32 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>patch5-renderstyle-animation-attributes-update1.patch</filename>
            <type>text/plain</type>
            <size>39074</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmOWI2MDFjLi5kYzY3NDc0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDct
MjUgIEphY29iIFJlZnN0cnVwICA8amFjb2IucmVmc3RydXBAaHAuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IG1pdHouCisgICAgICAgIAorICAgICAgICAtIGFkZGVkIHRlc3QgY2FzZSBmb3Ig
ZmxvYXQgYmVpbmcgYWRkZWQgaW4gdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAgICAgIG9mIGFu
IGFscmVhZHkgZnVsbCBsaW5lICh3aXRoIHByZS13cmFwIG9yIGFmdGVyLXdoaXRlLXNwYWNlIHNl
dCkuCisgICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4MDU3NDE+IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkwNgorCisgICAgICAgICogZmFzdC9ibG9jay9mbG9h
dC9lZGl0YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L2Jsb2NrL2Zsb2F0L2VkaXRhYmxlLXRleHQtb3ZlcmxhcHBpbmct
ZmxvYXQtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9m
YXN0L2Jsb2NrL2Zsb2F0L2VkaXRhYmxlLXRleHQtb3ZlcmxhcHBpbmctZmxvYXQtZXhwZWN0ZWQu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ibG9jay9mbG9hdC9lZGl0
YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vcXQvZmFzdC9ibG9jay9mbG9hdC9lZGl0YWJsZS10ZXh0LW92ZXJsYXBwaW5n
LWZsb2F0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMDgtMDctMjQgIERhdmlkIEh5YXR0ICA8
aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBhbiBhbHRlcm5hdGUg
cHJvcG9zZWQgc3ludGF4IGZvciBDU1MgdmFyaWFibGVzLiAgVGhpcyBhbHRlcm5hdGUgc3ludGF4
IHdpbGwgYWxsb3cKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvYmxvY2svZmxvYXQvZWRp
dGFibGUtdGV4dC1vdmVybGFwcGluZy1mbG9hdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ibG9j
ay9mbG9hdC9lZGl0YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzYWQ1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvYmxvY2svZmxvYXQvZWRpdGFibGUtdGV4dC1vdmVybGFwcGluZy1mbG9hdC5o
dG1sCkBAIC0wLDAgKzEsNSBAQAorPHA+CisgICAgVGV4dCBzaG91bGQgbm90IG92ZXJsYXAgdGhl
IGJsdWUgc3F1YXJlLgorPC9wPgorPGRpdiBzdHlsZT0iLXdlYmtpdC1saW5lLWJyZWFrOiBhZnRl
ci13aGl0ZS1zcGFjZTsgd2lkdGg6IDM5NnB4OyBib3JkZXI6IHNvbGlkIG1hcm9vbjsgcGFkZGlu
ZzogMnB4OyI+RnVzY2UgYXQgYW50ZS4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3Qu
IE1hZWNlbmFzIGlhY3VsaXMgbm9udW1teSBtYWduYS4gVml2YW11cyBhIHRvcnRvciB2aXRhZSBl
bmltIG9ybmFyZSBjb25zZWN0ZXR1ZXIuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25z
ZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LiBFdGlhbSBldCBpcHN1bS4gTmFtIGNvbnNlY3RldHVl
ciBtaSBlZ2V0IHZlbGl0LiA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7
IHdpZHRoOiA0ZW07IGhlaWdodDogNGVtOyBmbG9hdDogcmlnaHQiPjwvZGl2PiBTZWQgbmVjIHJp
c3VzIHZpdGFlIGZlbGlzIGF1Y3RvciB1bHRyaWNpZXMuIFBlbGxlbnRlc3F1ZSBhbGlxdWV0IHF1
YW0gYWMgbG9yZW0uIER1aXMgaW50ZXJkdW0sIGVsaXQgaW4gdWx0cmljaWVzIGF1Y3RvciwgZXJh
dCBwZWRlIHNvbGxpY2l0dWRpbiBsaWJlcm8sIG5vbiB1bHRyaWNlcyBvZGlvIGVsaXQgaW4gYXVn
dWUuIFV0IGVnZXN0YXMgYmliZW5kdW0gbGVjdHVzLiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lv
c3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBo
eW1lbmFlb3MuCis8L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L2Jsb2NrL2Zsb2F0L2VkaXRhYmxlLXRleHQtb3ZlcmxhcHBpbmctZmxvYXQtZXhwZWN0ZWQu
Y2hlY2tzdW0gYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ibG9jay9mbG9hdC9lZGl0
YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0LWV4cGVjdGVkLmNoZWNrc3VtCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDM1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ibG9jay9mbG9hdC9lZGl0YWJsZS10ZXh0LW92ZXJs
YXBwaW5nLWZsb2F0LWV4cGVjdGVkLmNoZWNrc3VtCkBAIC0wLDAgKzEgQEAKK2NiZGUwMjk3ZGE2
ZWI4MTkwZWRjMWIwZTQ1ZTcyZWJmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYmxvY2svZmxvYXQvZWRpdGFibGUt
dGV4dC1vdmVybGFwcGluZy1mbG9hdC1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9ibG9jay9mbG9hdC9lZGl0YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0LWV4
cGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBjOGExCkJp
bmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qv
YmxvY2svZmxvYXQvZWRpdGFibGUtdGV4dC1vdmVybGFwcGluZy1mbG9hdC1leHBlY3RlZC5wbmcg
ZGlmZmVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ibG9jay9m
bG9hdC9lZGl0YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Jsb2NrL2Zsb2F0L2VkaXRhYmxlLXRleHQtb3Zlcmxh
cHBpbmctZmxvYXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmJkYjg0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC9ibG9jay9mbG9hdC9lZGl0YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0LWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDIzIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVu
ZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYw
MAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVy
Qm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayB7UH0g
YXQgKDAsMCkgc2l6ZSA3ODR4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDAp
IHNpemUgMjUzeDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjUzOiAiVGV4
dCBzaG91bGQgbm90IG92ZXJsYXAgdGhlIGJsdWUgc3F1YXJlLiIKKyAgICAgIFJlbmRlckJsb2Nr
IHtESVZ9IGF0ICgwLDM0KSBzaXplIDQwNngxOTAgW2JvcmRlcjogKDNweCBzb2xpZCAjODAwMDAw
KV0KKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg1LDUpIHNpemUgMzk5eDcyCisgICAg
ICAgICAgdGV4dCBydW4gYXQgKDUsNSkgd2lkdGggMzYzOiAiRnVzY2UgYXQgYW50ZS4gSW4gaGFj
IGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIE1hZWNlbmFzICIKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoNSwyMykgd2lkdGggMzg1OiAiaWFjdWxpcyBub251bW15IG1hZ25hLiBWaXZhbXVzIGEg
dG9ydG9yIHZpdGFlIGVuaW0gb3JuYXJlICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNSw0MSkg
d2lkdGggMzQ5OiAiY29uc2VjdGV0dWVyLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29u
c2VjdGV0dWVyICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNSw1OSkgd2lkdGggMzk5OiAiYWRp
cGlzY2luZyBlbGl0LiBFdGlhbSBldCBpcHN1bS4gTmFtIGNvbnNlY3RldHVlciBtaSBlZ2V0IHZl
bGl0LiAiCisgICAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDMzNyw3Nykg
c2l6ZSA2NHg2NCBbYmdjb2xvcj0jQUREOEU2XQorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDQwNCw1OSkgc2l6ZSAzOTZ4MTI2CisgICAgICAgICAgdGV4dCBydW4gYXQgKDQwNCw1OSkg
d2lkdGggLTM6ICIgIgorICAgICAgICAgIHRleHQgcnVuIGF0ICg1LDc3KSB3aWR0aCAzMzI6ICJT
ZWQgbmVjIHJpc3VzIHZpdGFlIGZlbGlzIGF1Y3RvciB1bHRyaWNpZXMuIFBlbGxlbnRlc3F1ZSAi
CisgICAgICAgICAgdGV4dCBydW4gYXQgKDUsOTUpIHdpZHRoIDI4NDogImFsaXF1ZXQgcXVhbSBh
YyBsb3JlbS4gRHVpcyBpbnRlcmR1bSwgZWxpdCBpbiAiCisgICAgICAgICAgdGV4dCBydW4gYXQg
KDUsMTEzKSB3aWR0aCAzMDY6ICJ1bHRyaWNpZXMgYXVjdG9yLCBlcmF0IHBlZGUgc29sbGljaXR1
ZGluIGxpYmVybywgbm9uICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNSwxMzEpIHdpZHRoIDMw
MjogInVsdHJpY2VzIG9kaW8gZWxpdCBpbiBhdWd1ZS4gVXQgZWdlc3RhcyBiaWJlbmR1bSAiCisg
ICAgICAgICAgdGV4dCBydW4gYXQgKDUsMTQ5KSB3aWR0aCAzNTI6ICJsZWN0dXMuIENsYXNzIGFw
dGVudCB0YWNpdGkgc29jaW9zcXUgYWQgbGl0b3JhIHRvcnF1ZW50IHBlciAiCisgICAgICAgICAg
dGV4dCBydW4gYXQgKDUsMTY3KSB3aWR0aCAyNTU6ICJjb251YmlhIG5vc3RyYSwgcGVyIGluY2Vw
dG9zIGh5bWVuYWVvcy4iCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0
L2Jsb2NrL2Zsb2F0L2VkaXRhYmxlLXRleHQtb3ZlcmxhcHBpbmctZmxvYXQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9ibG9jay9mbG9hdC9lZGl0YWJsZS10ZXh0
LW92ZXJsYXBwaW5nLWZsb2F0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kOGY0MDlhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvZmFzdC9ibG9jay9mbG9hdC9lZGl0YWJsZS10ZXh0LW92ZXJsYXBwaW5nLWZsb2F0LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDIzIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUg
ODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAg
UmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9j
ayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MTkKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgMjU2eDE5CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjU2
OiAiVGV4dCBzaG91bGQgbm90IG92ZXJsYXAgdGhlIGJsdWUgc3F1YXJlLiIKKyAgICAgIFJlbmRl
ckJsb2NrIHtESVZ9IGF0ICgwLDMzKSBzaXplIDQwNngyMDAgW2JvcmRlcjogKDNweCBzb2xpZCAj
ODAwMDAwKV0KKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg1LDUpIHNpemUgMzk5eDc2
CisgICAgICAgICAgdGV4dCBydW4gYXQgKDUsNSkgd2lkdGggMzc3OiAiRnVzY2UgYXQgYW50ZS4g
SW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIE1hZWNlbmFzICIKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoNSwyNCkgd2lkdGggMzg1OiAiaWFjdWxpcyBub251bW15IG1hZ25hLiBWaXZh
bXVzIGEgdG9ydG9yIHZpdGFlIGVuaW0gb3JuYXJlICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAo
NSw0Mykgd2lkdGggMzU3OiAiY29uc2VjdGV0dWVyLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1l
dCwgY29uc2VjdGV0dWVyICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNSw2Mikgd2lkdGggMzk5
OiAiYWRpcGlzY2luZyBlbGl0LiBFdGlhbSBldCBpcHN1bS4gTmFtIGNvbnNlY3RldHVlciBtaSBl
Z2V0IHZlbGl0LiAiCisgICAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDM0
NSw4MSkgc2l6ZSA1Nng1NiBbYmdjb2xvcj0jQUREOEU2XQorICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDQwNCw2Mikgc2l6ZSAzOTZ4MTMzCisgICAgICAgICAgdGV4dCBydW4gYXQgKDQw
NCw2Mikgd2lkdGggLTM6ICIgIgorICAgICAgICAgIHRleHQgcnVuIGF0ICg1LDgxKSB3aWR0aCAz
Mzk6ICJTZWQgbmVjIHJpc3VzIHZpdGFlIGZlbGlzIGF1Y3RvciB1bHRyaWNpZXMuIFBlbGxlbnRl
c3F1ZSAiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDUsMTAwKSB3aWR0aCAzMzQ6ICJhbGlxdWV0
IHF1YW0gYWMgbG9yZW0uIER1aXMgaW50ZXJkdW0sIGVsaXQgaW4gdWx0cmljaWVzICIKKyAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoNSwxMTkpIHdpZHRoIDMzMzogImF1Y3RvciwgZXJhdCBwZWRlIHNv
bGxpY2l0dWRpbiBsaWJlcm8sIG5vbiB1bHRyaWNlcyBvZGlvICIKKyAgICAgICAgICB0ZXh0IHJ1
biBhdCAoNSwxMzgpIHdpZHRoIDM4NTogImVsaXQgaW4gYXVndWUuIFV0IGVnZXN0YXMgYmliZW5k
dW0gbGVjdHVzLiBDbGFzcyBhcHRlbnQgdGFjaXRpICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAo
NSwxNTcpIHdpZHRoIDM4MTogInNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJp
YSBub3N0cmEsIHBlciBpbmNlcHRvcyAiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDUsMTc2KSB3
aWR0aCA3ODogImh5bWVuYWVvcy4iCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGMwMTcwNTAuLmI2MTlmODYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIw
MDgtMDctMjUgIEphY29iIFJlZnN0cnVwICA8amFjb2IucmVmc3RydXBAaHAuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IG1pdHouCisKKyAgICAgICAgLSBmaXggaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTA2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODA1
NzQxPiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgb3IgLXdlYmtpdC1saW5lLWJyZWFrOiBhZnRlci13
aGl0ZS1zcGFjZSB0ZXh0IGNhbiBvdmVybGFwIGZsb2F0IGF0IGVuZCBvZiBsaW5lCisgICAgICAg
IAorICAgICAgICBUZXN0OiBmYXN0L2Jsb2NrL2Zsb2F0L2VkaXRhYmxlLXRleHQtb3ZlcmxhcHBp
bmctZmxvYXQuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL2JpZGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnNraXBUcmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAtIHJlbmFtZWQgdG8gcmVmbGVjdCB1
c2FnZSBhbmQgcmVtb3ZlZCBjYWxsIHRvIHBvc2l0aW9uIGZsb2F0czsgCisgICAgICAgICAgdGhl
eSBvbmx5IGdldCBhZGRlZAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNraXBMZWFk
aW5nV2hpdGVzcGFjZSk6CisgICAgICAgIC0gcmVuYW1lZCB0byByZWZsZWN0IHVzYWdlCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWspOgorICAgICAgICAt
IHVzZSBza2lwVHJhaWxpbmdXaGl0ZXNwYWNlIGF0IGVuZCBvZiBsaW5lIChhcyBiZWZvcmUgYnV0
IHdpdGggbmV3CisgICAgICAgICAgbmFtZSkKKwogMjAwOC0wNy0yNSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCAwMTIwYjQ1Li5k
MzVmODQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAK
QEAgLTEwNjgsNyArMTA2OCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAgICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHQtPmRlbGF5
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EZWxheSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1MpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uOiB7
CkBAIC0xMDc5LDcgKzEwNzksNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh0LT5kdXJh
dGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUykpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24oKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNl
KCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbjogewpAQCAtMTA5Miw3ICsxMDkyLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBw
cm9wZXIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHls
ZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVGltaW5n
RnVuY3Rpb24mIHRmID0gUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlv
bigpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NUaW1pbmdGdW5jdGlvblZhbHVl
OjpjcmVhdGUodGYueDEoKSwgdGYueTEoKSwgdGYueDIoKSwgdGYueTIoKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAppbmRleCAyYThmYzI4Li40YjgxZjk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cApAQCAtMjA4LDcgKzIwOCw3IEBAIGlmIChpc0luaGVyaXQpIHsgXAogfSBcCiBpZiAoaXNJbml0
aWFsKSB7IFwKICAgICBBbmltYXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5z
aXRpb25zKCk7IFwKLSAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlh
bCMjUHJvcCgpKTsgXAorICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0
aWFsQW5pbWF0aW9uIyNQcm9wKCkpOyBcCiAgICAgZm9yIChjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQt
Pm5leHQoKTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKSkgXAogICAg
ICAgICBjdXJyQ2hpbGQtPmNsZWFyIyNQcm9wKCk7IFwKICAgICByZXR1cm47IFwKQEAgLTQ5OTEs
NyArNDk5MSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFlQb3NpdGlvbihGaWxs
TGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cER1cmF0aW9uKEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsRHVyYXRp
b24oKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0
aWFsQW5pbWF0aW9uRHVyYXRpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUw
MDgsNyArNTAwOCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRHVyYXRpb24oQW5pbWF0
aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hcERlbGF5KEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSk7
CisgICAgICAgIHRyYW5zaXRpb24tPnNldERlbGF5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0
aW9uRGVsYXkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUwMjYsNyArNTAyNiw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRGVsYXkoQW5pbWF0aW9uKiB0cmFuc2l0aW9u
LCBDU1NWYWx1ZSogdmFsdWUpCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRpbWluZ0Z1bmN0
aW9uKEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2
YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7Ci0gICAgICAg
IHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVGltaW5n
RnVuY3Rpb24oKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFJlbmRl
clN0eWxlOjppbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC01MDYxLDcgKzUwNjEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hcFRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBQcm9wZXJ0eShBbmltYXRpb24qIHRyYW5z
aXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgp
ID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm9w
ZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpOworICAgICAgICB0cmFuc2l0aW9u
LT5zZXRQcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvblByb3BlcnR5KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggOTUwZWU4Zi4uYmVhYjIyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0FuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNw
cApAQCAtMTkxLDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHN1c3BlbmRBbmlt
YXRpb25zKCk7CiAgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgYm9vbCBzdXNwZW5k
ZWQoKSBjb25zdCAgICAgIHsgcmV0dXJuIG1fc3VzcGVuZGVkOyB9CisgICAgYm9vbCBzdXNwZW5k
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQogICAgIAogICAgIHZvaWQgb3ZlcnJp
ZGVJbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KTsKICAgICB2b2lkIHJlc3VtZU92ZXJy
aWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KTsKQEAgLTQ4MCw3ICs0ODAsNyBA
QCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCBp
bnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAgICBtX3BhdXNlVGltZSA9IC0xOwogICAgICAgICBl
bmRBbmltYXRpb24oZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKHJ1bm5pbmcoKSkKKyAg
ICAgICAgaWYgKCFwYXVzZWQoKSkKICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFU
RV9JTlBVVF9TVEFSVF9BTklNQVRJT04sIC0xKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE3MzksMTcgKzE3MzksMTEgQEAgYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1hdGlu
Z1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHAKIAogdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCiB7
Ci0jaWZkZWYgREVCVUdfU1RBVEVfTUFDSElORQotICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0
aW9uQ29udHJvbGxlciAlcCBzdXNwZW5kQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRo
aXMsIGRvY3VtZW50KTsKLSNlbmRpZgogICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1hdGlvbnMoZG9j
dW1lbnQpOwogfQogCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMo
RG9jdW1lbnQqIGRvY3VtZW50KQogewotI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKLSAgICBm
cHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAgcmVzdW1lQW5pbWF0aW9ucyBm
b3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKLSNlbmRpZgogICAgIG1fZGF0YS0+
cmVzdW1lQW5pbWF0aW9ucyhkb2N1bWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmlu
ZGV4IGI1NDJlMGQuLjJiYjc3ZjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtMTQ1LDgg
KzE0NSw4IEBAIHB1YmxpYzoKICAgICBib29sIG1hdGNoZWRFbmRMaW5lKGNvbnN0IElubGluZUJp
ZGlSZXNvbHZlciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJp
ZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBSb290SW5s
aW5lQm94KiYgZW5kTGluZSwgaW50JiBlbmRZUG9zLCBpbnQmIHJlcGFpbnRCb3R0b20sIGludCYg
cmVwYWludFRvcCk7CiAgICAgYm9vbCBnZW5lcmF0ZXNMaW5lQm94ZXNGb3JJbmxpbmVDaGlsZChS
ZW5kZXJPYmplY3QqKTsKLSAgICBpbnQgc2tpcFdoaXRlc3BhY2UoSW5saW5lSXRlcmF0b3ImKTsK
LSAgICBpbnQgc2tpcFdoaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJik7CisgICAgdm9pZCBz
a2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJik7CisgICAgaW50IHNraXBMZWFk
aW5nV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2ZXImKTsKICAgICB2b2lkIGZpdEJlbG93Rmxv
YXRzKGludCB3aWR0aFRvRml0LCBpbnQmIGF2YWlsYWJsZVdpZHRoKTsKICAgICBJbmxpbmVJdGVy
YXRvciBmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBFQ2xlYXIqIGNsZWFy
ID0gMCk7CiAgICAgUm9vdElubGluZUJveCogY29uc3RydWN0TGluZSh1bnNpZ25lZCBydW5Db3Vu
dCwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIGxhc3RSdW4sIGJvb2wgbGFzdExpbmUsIFJl
bmRlck9iamVjdCogZW5kT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL2Jp
ZGkuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAKaW5kZXggMDBiNGJlYS4uZjFkM2Q1
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvYmlkaS5jcHAKQEAgLTE0MzYsMTkgKzE0MzYsMTggQEAgYm9vbCBSZW5kZXJCbG9j
azo6Z2VuZXJhdGVzTGluZUJveGVzRm9ySW5saW5lQ2hpbGQoUmVuZGVyT2JqZWN0KiBpbmxpbmVP
YmopCiAgICAgcmV0dXJuICFpdC5hdEVuZCgpOwogfQogCi0vLyBGSVhNRTogVGhlIGVudGlyZSBj
b25jZXB0IG9mIHRoZSBza2lwV2hpdGVzcGFjZSBmdW5jdGlvbiBpcyBmbGF3ZWQsIHNpbmNlIHdl
IHJlYWxseSBuZWVkIHRvIGJlIGJ1aWxkaW5nCisvLyBGSVhNRTogVGhlIGVudGlyZSBjb25jZXB0
IG9mIHRoZSBza2lwVHJhaWxpbmdXaGl0ZXNwYWNlIGZ1bmN0aW9uIGlzIGZsYXdlZCwgc2luY2Ug
d2UgcmVhbGx5IG5lZWQgdG8gYmUgYnVpbGRpbmcKIC8vIGxpbmUgYm94ZXMgZXZlbiBmb3IgY29u
dGFpbmVycyB0aGF0IG1heSB1bHRpbWF0ZWx5IGNvbGxhcHNlIGF3YXkuICBPdGhlcndpc2Ugd2Un
bGwgbmV2ZXIgZ2V0IHBvc2l0aW9uZWQKIC8vIGVsZW1lbnRzIHF1aXRlIHJpZ2h0LiAgSW4gb3Ro
ZXIgd29yZHMsIHdlIG5lZWQgdG8gYnVpbGQgdGhpcyBmdW5jdGlvbidzIHdvcmsgaW50byB0aGUg
bm9ybWFsIGxpbmUKIC8vIG9iamVjdCBpdGVyYXRpb24gcHJvY2Vzcy4KLWludCBSZW5kZXJCbG9j
azo6c2tpcFdoaXRlc3BhY2UoSW5saW5lSXRlcmF0b3ImIGl0ZXJhdG9yKQorLy8gTkIuIHRoaXMg
ZnVuY3Rpb24gd2lsbCBpbnNlcnQgYW55IGZsb2F0aW5nIGVsZW1lbnRzIHRoYXQgd291bGQgb3Ro
ZXJ3aXNlCisvLyBiZSBza2lwcGVkIGJ1dCBpdCB3aWxsIG5vdCBwb3NpdGlvbiB0aGVtLgordm9p
ZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYgaXRl
cmF0b3IpCiB7Ci0gICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbGluZVdpZHRoKG1faGVpZ2h0KTsK
ICAgICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChpdGVyYXRv
cikpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBpdGVyYXRvci5vYmo7CiAgICAg
ICAgIGlmIChvYmplY3QtPmlzRmxvYXRpbmcoKSkgewogICAgICAgICAgICAgaW5zZXJ0RmxvYXRp
bmdPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7Ci0gICAg
ICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChtX2hlaWdodCk7CiAgICAgICAgIH0g
ZWxzZSBpZiAob2JqZWN0LT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IFRoZSBtYXRoIGhlcmUgaXMgYWN0dWFsbHkgbm90IHJlYWxseSByaWdodC4gIEl0J3MgYSBiZXN0
LWd1ZXNzIGFwcHJveGltYXRpb24gdGhhdAogICAgICAgICAgICAgLy8gd2lsbCB3b3JrIGZvciB0
aGUgY29tbW9uIGNhc2VzCkBAIC0xNDczLDEwICsxNDcyLDkgQEAgaW50IFJlbmRlckJsb2NrOjpz
a2lwV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYgaXRlcmF0b3IpCiAgICAgICAgIH0KICAgICAg
ICAgaXRlcmF0b3IuaW5jcmVtZW50KCk7CiAgICAgfQotICAgIHJldHVybiBhdmFpbGFibGVXaWR0
aDsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpza2lwV2hpdGVzcGFjZShJbmxpbmVCaWRpUmVzb2x2
ZXImIHJlc29sdmVyKQoraW50IFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5s
aW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKIHsKICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBs
aW5lV2lkdGgobV9oZWlnaHQpOwogICAgIHdoaWxlICghcmVzb2x2ZXIucG9zaXRpb24oKS5hdEVu
ZCgpICYmICFyZXF1aXJlc0xpbmVCb3gocmVzb2x2ZXIucG9zaXRpb24oKSkpIHsKQEAgLTE1NTks
NyArMTU1Nyw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVh
ayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBFQ2xlCiAKICAgICBib29sIGFwcGxpZWRT
dGFydFdpZHRoID0gcmVzb2x2ZXIucG9zaXRpb24oKS5wb3MgPiAwOwogCi0gICAgaW50IHdpZHRo
ID0gc2tpcFdoaXRlc3BhY2UocmVzb2x2ZXIpOworICAgIGludCB3aWR0aCA9IHNraXBMZWFkaW5n
V2hpdGVzcGFjZShyZXNvbHZlcik7CiAKICAgICBpbnQgdyA9IDA7CiAgICAgaW50IHRtcFcgPSAw
OwpAQCAtMTg3OCw3ICsxODc2LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmRO
ZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIEVDbGUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdhc1Rvb1dpZGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsub2JqID0gbzsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbEJyZWFrLnBvcyA9IHBvczsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2tpcFdoaXRlc3BhY2UobEJyZWFrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2tpcFRyYWlsaW5nV2hpdGVzcGFjZShsQnJlYWspOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaW5lV2FzVG9vV2lkZSB8fCB3ICsgdG1wVyA+IHdpZHRoKSB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKaW5kZXggZTAwMjE0Zi4uNDllNGY5NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisrKyBi
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcApAQCAtNjY0LDI5ICs2NjQs
OTIgQEAgVHJhbnNmb3JtT3BlcmF0aW9uKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcm9tRiArIChtX2YgLSBmcm9tRikgKiBwcm9ncmVzcyk7CiB9CiAKK2Jv
b2wgS2V5ZnJhbWVMaXN0OjpvcGVyYXRvcj09KGNvbnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3QK
K3sKKyAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpICE9IG8ubV9rZXlmcmFtZXMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVl
Pjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gby5tX2tleWZyYW1lcy5iZWdpbigpOyAgICAKKyAgICBm
b3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQxID0gbV9rZXlmcmFt
ZXMuYmVnaW4oKTsgaXQxICE9IG1fa2V5ZnJhbWVzLmVuZCgpOyArK2l0MSkgeworICAgICAgICBp
ZiAoaXQxLT5rZXkgIT0gaXQyLT5rZXkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTEgPSBpdDEtPnN0eWxlOworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUyID0gaXQyLT5zdHlsZTsKKyAgICAgICAgaWYgKCEoc3R5bGUx
ID09IHN0eWxlMikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsraXQyOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZAorS2V5ZnJhbWVMaXN0Ojpp
bnNlcnQoZmxvYXQgaW5LZXksIGNvbnN0IFJlbmRlclN0eWxlJiBpblN0eWxlKQoreworICAgIGlm
IChpbktleSA8IDAgfHwgaW5LZXkgPiAxKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fa2V5ZnJhbWVzW2ldLmtleSA9PSBpbktleSkgeworICAgICAgICAgICAgbV9rZXlm
cmFtZXNbaV0uc3R5bGUgPSBpblN0eWxlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmIChtX2tleWZyYW1lc1tpXS5rZXkgPiBpbktleSkgeworICAgICAgICAgICAg
Ly8gaW5zZXJ0IGJlZm9yZQorICAgICAgICAgICAgbV9rZXlmcmFtZXMuaW5zZXJ0KGksIEtleWZy
YW1lVmFsdWUoKSk7CisgICAgICAgICAgICBtX2tleWZyYW1lc1tpXS5rZXkgPSBpbktleTsKKyAg
ICAgICAgICAgIG1fa2V5ZnJhbWVzW2ldLnN0eWxlID0gaW5TdHlsZTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBhcHBlbmQKKyAgICBtX2tleWZy
YW1lcy5hcHBlbmQoS2V5ZnJhbWVWYWx1ZSgpKTsKKyAgICBtX2tleWZyYW1lc1ttX2tleWZyYW1l
cy5zaXplKCktMV0ua2V5ID0gaW5LZXk7CisgICAgbV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6
ZSgpLTFdLnN0eWxlID0gaW5TdHlsZTsKK30KKwogQW5pbWF0aW9uOjpBbmltYXRpb24oKQotICAg
IDogbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpCi0gICAgLCBtX3Rp
bWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVGltaW5nRnVuY3Rpb24oKSkKLSAgICAs
IG1fZGVsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpKQotICAgICwgbV9wcm9wZXJ0eShS
ZW5kZXJTdHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpCi0gICAgLCBtX2R1cmF0aW9uU2V0KGZhbHNl
KQotICAgICwgbV90aW1pbmdGdW5jdGlvblNldChmYWxzZSkKKyAgICA6IG1fZGVsYXkoUmVuZGVy
U3R5bGU6OmluaXRpYWxBbmltYXRpb25EZWxheSgpKQorICAgICwgbV9kaXJlY3Rpb24oUmVuZGVy
U3R5bGU6OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSkKKyAgICAsIG1fZHVyYXRpb24oUmVu
ZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpKQorICAgICwgbV9pdGVyYXRpb25D
b3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpCisgICAg
LCBtX25hbWUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25OYW1lKCkpCisgICAgLCBtX3By
b3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSkKKyAgICAsIG1f
dGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlv
bigpKQorICAgICwgbV9wbGF5U3RhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25QbGF5
U3RhdGUoKSkKICAgICAsIG1fZGVsYXlTZXQoZmFsc2UpCisgICAgLCBtX2RpcmVjdGlvblNldChm
YWxzZSkKKyAgICAsIG1fZHVyYXRpb25TZXQoZmFsc2UpCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50
U2V0KGZhbHNlKQorICAgICwgbV9uYW1lU2V0KGZhbHNlKQorICAgICwgbV9wbGF5U3RhdGVTZXQo
ZmFsc2UpCiAgICAgLCBtX3Byb3BlcnR5U2V0KGZhbHNlKQorICAgICwgbV90aW1pbmdGdW5jdGlv
blNldChmYWxzZSkKKyAgICAsIG1faXNOb25lKGZhbHNlKQogICAgICwgbV9uZXh0KDApCiB7CiB9
CiAKIEFuaW1hdGlvbjo6QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgbykKICAgICA6IFJlZkNv
dW50ZWQ8QW5pbWF0aW9uPigpCi0gICAgLCBtX2R1cmF0aW9uKG8ubV9kdXJhdGlvbikKLSAgICAs
IG1fdGltaW5nRnVuY3Rpb24oby5tX3RpbWluZ0Z1bmN0aW9uKQogICAgICwgbV9kZWxheShvLm1f
ZGVsYXkpCisgICAgLCBtX2RpcmVjdGlvbihvLm1fZGlyZWN0aW9uKQorICAgICwgbV9kdXJhdGlv
bihvLm1fZHVyYXRpb24pCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50KG8ubV9pdGVyYXRpb25Db3Vu
dCkKKyAgICAsIG1fbmFtZShvLm1fbmFtZSkKICAgICAsIG1fcHJvcGVydHkoby5tX3Byb3BlcnR5
KQotICAgICwgbV9kdXJhdGlvblNldChvLm1fZHVyYXRpb25TZXQpCi0gICAgLCBtX3RpbWluZ0Z1
bmN0aW9uU2V0KG8ubV90aW1pbmdGdW5jdGlvblNldCkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb24o
by5tX3RpbWluZ0Z1bmN0aW9uKQorICAgICwgbV9wbGF5U3RhdGUoby5tX3BsYXlTdGF0ZSkKICAg
ICAsIG1fZGVsYXlTZXQoby5tX2RlbGF5U2V0KQorICAgICwgbV9kaXJlY3Rpb25TZXQoby5tX2Rp
cmVjdGlvblNldCkKKyAgICAsIG1fZHVyYXRpb25TZXQoby5tX2R1cmF0aW9uU2V0KQorICAgICwg
bV9pdGVyYXRpb25Db3VudFNldChvLm1faXRlcmF0aW9uQ291bnRTZXQpCisgICAgLCBtX25hbWVT
ZXQoby5tX25hbWVTZXQpCisgICAgLCBtX3BsYXlTdGF0ZVNldChvLm1fcGxheVN0YXRlU2V0KQog
ICAgICwgbV9wcm9wZXJ0eVNldChvLm1fcHJvcGVydHlTZXQpCisgICAgLCBtX3RpbWluZ0Z1bmN0
aW9uU2V0KG8ubV90aW1pbmdGdW5jdGlvblNldCkKKyAgICAsIG1faXNOb25lKG8ubV9pc05vbmUp
CiAgICAgLCBtX25leHQoby5tX25leHQgPyBuZXcgQW5pbWF0aW9uKCooby5tX25leHQuZ2V0KCkp
KSA6IDApCiB7CiB9CkBAIC02OTgsMzMgKzc2MSw2MiBAQCBBbmltYXRpb24mIEFuaW1hdGlvbjo6
b3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlvbiYgbykKICAgICB9CiAKICAgICBtX2RlbGF5ID0gby5t
X2RlbGF5OworICAgIG1fZGlyZWN0aW9uID0gby5tX2RpcmVjdGlvbjsKICAgICBtX2R1cmF0aW9u
ID0gby5tX2R1cmF0aW9uOwotICAgIG1fdGltaW5nRnVuY3Rpb24gPSBvLm1fdGltaW5nRnVuY3Rp
b247CisgICAgbV9pdGVyYXRpb25Db3VudCA9IG8ubV9pdGVyYXRpb25Db3VudDsKKyAgICBtX25h
bWUgPSBvLm1fbmFtZTsKKyAgICBtX3BsYXlTdGF0ZSA9IG8ubV9wbGF5U3RhdGU7CiAgICAgbV9w
cm9wZXJ0eSA9IG8ubV9wcm9wZXJ0eTsKKyAgICBtX3RpbWluZ0Z1bmN0aW9uID0gby5tX3RpbWlu
Z0Z1bmN0aW9uOwogCiAgICAgbV9kZWxheVNldCA9IG8ubV9kZWxheVNldDsKKyAgICBtX2RpcmVj
dGlvblNldCA9IG8ubV9kaXJlY3Rpb25TZXQ7CiAgICAgbV9kdXJhdGlvblNldCA9IG8ubV9kdXJh
dGlvblNldDsKLSAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gby5tX3RpbWluZ0Z1bmN0aW9uU2V0
OworICAgIG1faXRlcmF0aW9uQ291bnRTZXQgPSBvLm1faXRlcmF0aW9uQ291bnRTZXQ7CisgICAg
bV9uYW1lU2V0ID0gby5tX25hbWVTZXQ7CisgICAgbV9wbGF5U3RhdGVTZXQgPSBvLm1fcGxheVN0
YXRlU2V0OwogICAgIG1fcHJvcGVydHlTZXQgPSBvLm1fcHJvcGVydHlTZXQ7CisgICAgbV90aW1p
bmdGdW5jdGlvblNldCA9IG8ubV90aW1pbmdGdW5jdGlvblNldDsKKworICAgIG1faXNOb25lID0g
by5tX2lzTm9uZTsKIAogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBBbmltYXRpb246OmFu
aW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24qIG8pIGNvbnN0Citib29sIEFuaW1hdGlvbjo6
YW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiogbywgYm9vbCBtYXRjaFBsYXlTdGF0ZXMg
LyogPSB0cnVlICovKSBjb25zdAogewogICAgIGlmICghbykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGJvb2wgcmVzdWx0ID0gbV9kdXJhdGlvbiA9PSBvLT5tX2R1cmF0aW9uICYm
Ci0gICAgICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uID09IG8tPm1fdGltaW5nRnVuY3Rp
b24gJiYKLSAgICAgICAgICAgICAgICAgIG1fZGVsYXkgPT0gby0+bV9kZWxheSAmJgorICAgIGJv
b2wgcmVzdWx0ID0gbV9kZWxheSA9PSBvLT5tX2RlbGF5ICYmCisgICAgICAgICAgICAgICAgICBt
X2RpcmVjdGlvbiA9PSBvLT5tX2RpcmVjdGlvbiAmJgorICAgICAgICAgICAgICAgICAgbV9kdXJh
dGlvbiA9PSBvLT5tX2R1cmF0aW9uICYmCisgICAgICAgICAgICAgICAgICBtX2l0ZXJhdGlvbkNv
dW50ID09IG8tPm1faXRlcmF0aW9uQ291bnQgJiYKKyAgICAgICAgICAgICAgICAgIG1fbmFtZSA9
PSBvLT5tX25hbWUgJiYKICAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHkgPT0gby0+bV9wcm9w
ZXJ0eSAmJiAKLSAgICAgICAgICAgICAgICAgIG1fZHVyYXRpb25TZXQgPT0gby0+bV9kdXJhdGlv
blNldCAmJiAKLSAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby0+bV90
aW1pbmdGdW5jdGlvblNldCAmJiAKKyAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb24g
PT0gby0+bV90aW1pbmdGdW5jdGlvbiAmJgogICAgICAgICAgICAgICAgICAgbV9kZWxheVNldCA9
PSBvLT5tX2RlbGF5U2V0ICYmCi0gICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5U2V0ID09IG8t
Pm1fcHJvcGVydHlTZXQ7CisgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvblNldCA9PSBvLT5t
X2RpcmVjdGlvblNldCAmJgorICAgICAgICAgICAgICAgICAgbV9kdXJhdGlvblNldCA9PSBvLT5t
X2R1cmF0aW9uU2V0ICYmCisgICAgICAgICAgICAgICAgICBtX2l0ZXJhdGlvbkNvdW50U2V0ID09
IG8tPm1faXRlcmF0aW9uQ291bnRTZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fbmFtZVNldCA9
PSBvLT5tX25hbWVTZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5U2V0ID09IG8t
Pm1fcHJvcGVydHlTZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25TZXQg
PT0gby0+bV90aW1pbmdGdW5jdGlvblNldCAmJgorICAgICAgICAgICAgICAgICAgbV9pc05vbmUg
PT0gby0+bV9pc05vbmU7CisgICAgCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAobWF0Y2hQbGF5U3RhdGVzICYmIChtX3BsYXlTdGF0ZSAhPSBv
LT5tX3BsYXlTdGF0ZSB8fCBtX3BsYXlTdGF0ZVNldCAhPSBvLT5tX3BsYXlTdGF0ZVNldCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBub3cgY2hlY2sga2V5ZnJhbWVzCisg
ICAgaWYgKChtX2tleWZyYW1lTGlzdC5nZXQoKSAmJiAhby0+bV9rZXlmcmFtZUxpc3QuZ2V0KCkp
IHx8ICghbV9rZXlmcmFtZUxpc3QuZ2V0KCkgJiYgby0+bV9rZXlmcmFtZUxpc3QuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEobV9rZXlmcmFtZUxpc3QuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKm1fa2V5ZnJhbWVMaXN0ID09ICpvLT5t
X2tleWZyYW1lTGlzdDsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZGVmaW5lIEZJ
TExfVU5TRVRfUFJPUEVSVFkodGVzdCwgcHJvcCkgXApAQCAtNzQyLDEwICs4MzQsMTQgQEAgcGF0
dGVybiA9IHRoaXM7IFwKIHZvaWQgQW5pbWF0aW9uOjpmaWxsVW5zZXRQcm9wZXJ0aWVzKCkKIHsK
ICAgICBBbmltYXRpb24qIGN1cnI7Ci0gICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0R1cmF0aW9u
U2V0LCBtX2R1cmF0aW9uKTsKLSAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzVGltaW5nRnVuY3Rp
b25TZXQsIG1fdGltaW5nRnVuY3Rpb24pOwogICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEZWxh
eVNldCwgbV9kZWxheSk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0RpcmVjdGlvblNldCwg
bV9kaXJlY3Rpb24pOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEdXJhdGlvblNldCwgbV9k
dXJhdGlvbik7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0l0ZXJhdGlvbkNvdW50U2V0LCBt
X2l0ZXJhdGlvbkNvdW50KTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzTmFtZVNldCwgbV9u
YW1lKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzUGxheVN0YXRlU2V0LCBtX3BsYXlTdGF0
ZSk7CiAgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc1Byb3BlcnR5U2V0LCBtX3Byb3BlcnR5KTsK
KyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzVGltaW5nRnVuY3Rpb25TZXQsIG1fdGltaW5nRnVu
Y3Rpb24pOwogfQogCiBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhKCkKQEAgLTc2MSw2ICs4NTcsNyBAQCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
OjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCkKICAgICAsIG1fYXBwZWFyYW5jZShSZW5kZXJT
dHlsZTo6aW5pdGlhbEFwcGVhcmFuY2UoKSkKICAgICAsIG1fYm9yZGVyRml0KFJlbmRlclN0eWxl
Ojppbml0aWFsQm9yZGVyRml0KCkpCiAgICAgLCBtX2JveFNoYWRvdygwKQorICAgICwgbV9hbmlt
YXRpb24oMCkKICAgICAsIG1fdHJhbnNpdGlvbigwKQogICAgICwgbV9tYXNrKEZpbGxMYXllcihN
YXNrRmlsbExheWVyKSkKICNpZiBFTkFCTEUoWEJMKQpAQCAtNzg4LDYgKzg4NSw3IEBAIFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEoY29uc3QgU3R5
bGVSYXJlTm9uSW5oZXJpdGVkCiAgICAgLCBtX2JvcmRlckZpdChvLm1fYm9yZGVyRml0KQogICAg
ICwgbV9ib3hTaGFkb3coby5tX2JveFNoYWRvdyA/IG5ldyBTaGFkb3dEYXRhKCpvLm1fYm94U2hh
ZG93KSA6IDApCiAgICAgLCBtX2JveFJlZmxlY3Qoby5tX2JveFJlZmxlY3QpCisgICAgLCBtX2Fu
aW1hdGlvbihvLm1fYW5pbWF0aW9uID8gbmV3IEFuaW1hdGlvbigqby5tX2FuaW1hdGlvbikgOiAw
KQogICAgICwgbV90cmFuc2l0aW9uKG8ubV90cmFuc2l0aW9uID8gbmV3IEFuaW1hdGlvbigqby5t
X3RyYW5zaXRpb24pIDogMCkKICAgICAsIG1fbWFzayhvLm1fbWFzaykKICAgICAsIG1fbWFza0Jv
eEltYWdlKG8ubV9tYXNrQm94SW1hZ2UpCkBAIC04NDEsNiArOTM5LDcgQEAgYm9vbCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRl
ZERhdGEmIG8pIGMKICAgICAgICAgJiYgbV9ib3JkZXJGaXQgPT0gby5tX2JvcmRlckZpdAogICAg
ICAgICAmJiBzaGFkb3dEYXRhRXF1aXZhbGVudChvKQogICAgICAgICAmJiByZWZsZWN0aW9uRGF0
YUVxdWl2YWxlbnQobykKKyAgICAgICAgJiYgYW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQobykKICAg
ICAgICAgJiYgdHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KG8pCiAgICAgICAgICYmIG1fbWFzayA9
PSBvLm1fbWFzawogICAgICAgICAmJiBtX21hc2tCb3hJbWFnZSA9PSBvLm1fbWFza0JveEltYWdl
CkBAIC04NzAsNiArOTY5LDI2IEBAIGJvb2wgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6cmVm
bGVjdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyCiAKIH0KIAordm9p
ZCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp1cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5
bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKK3sKKyAgICBBbmltYXRpb24qIGFuaW07CisgICAg
Zm9yIChhbmltID0gbV9hbmltYXRpb24uZ2V0KCk7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkp
IHsKKyAgICAgICAgaWYgKGFuaW0tPmlzVmFsaWRBbmltYXRpb24oKSkgeworICAgICAgICAgICAg
Ly9SZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSA9IHN0eWxlU2VsZWN0b3ItPmZpbmRLZXlm
cmFtZVJ1bGUoYW5pbS0+bmFtZSgpKTsKKyAgICAgICAgICAgIC8vYW5pbS0+c2V0QW5pbWF0aW9u
S2V5ZnJhbWUoa2V5ZnJhbWUpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGE6OmFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0Cit7CisgICAgaWYgKCFtX2FuaW1hdGlvbiAmJiBv
Lm1fYW5pbWF0aW9uIHx8IG1fYW5pbWF0aW9uICYmICFvLm1fYW5pbWF0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fYW5pbWF0aW9uICYmIG8ubV9hbmltYXRpb24gJiYgKCpt
X2FuaW1hdGlvbiAhPSAqby5tX2FuaW1hdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp0cmFu
c2l0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykg
Y29uc3QKIHsKICAgICBpZiAoIW1fdHJhbnNpdGlvbiAmJiBvLm1fdHJhbnNpdGlvbiB8fCBtX3Ry
YW5zaXRpb24gJiYgIW8ubV90cmFuc2l0aW9uKQpAQCAtMTg0NCw2ICsxOTYzLDMzIEBAIGNvbnN0
IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIFJlbmRlclN0eWxlOjpub25lRGFzaGJvYXJk
UmVnaW9ucygpCiB9CiAjZW5kaWYKIAordm9pZCBSZW5kZXJTdHlsZTo6YWRqdXN0QW5pbWF0aW9u
cygpCit7CisgICAgaWYgKGFuaW1hdGlvbnMoKSkgeworICAgICAgICBpZiAoYW5pbWF0aW9ucygp
LT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgeworICAgICAgICAgICAgY2xlYXJBbmltYXRpb25z
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBnZXQgcmlk
IG9mIGFueSB0cmFpbGluZyBlbXB0eSBhbmltYXRpb25zCisgICAgICAgIEFuaW1hdGlvbiogbmV4
dDsKKyAgICAgICAgZm9yIChBbmltYXRpb24qIHAgPSBhY2Nlc3NBbmltYXRpb25zKCk7IHA7IHAg
PSBuZXh0KSB7CisgICAgICAgICAgICBuZXh0ID0gcC0+bmV4dCgpOworICAgICAgICAgICAgaWYg
KG5leHQgJiYgbmV4dC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcC0+c2V0TmV4dCgw
KTsgLy8gcmVtb3ZlcyB0aGUgcmVmLCBzbyBuZXh0IGdldHMgZGVsZXRlZAorICAgICAgICAgICAg
ICAgIG5leHQgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFhbmltYXRpb25zKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgLy8gUmVwZWF0IHBhdHRlcm5zIGludG8gbGF5ZXJzIHRoYXQgZG9uJ3QgaGF2
ZSBzb21lIHByb3BlcnRpZXMgc2V0LgorICAgICAgICBhY2Nlc3NBbmltYXRpb25zKCktPmZpbGxV
bnNldFByb3BlcnRpZXMoKTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyU3R5bGU6OmFkanVzdFRy
YW5zaXRpb25zKCkKIHsKICAgICBpZiAodHJhbnNpdGlvbnMoKSkgewpAQCAtMTg5Myw2ICsyMDM5
LDE0IEBAIHZvaWQgUmVuZGVyU3R5bGU6OmFkanVzdFRyYW5zaXRpb25zKCkKICAgICB9CiB9CiAK
K0FuaW1hdGlvbiogUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMoKQoreworICAgIEFuaW1h
dGlvbiogbGF5ZXIgPSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9hbmltYXRpb24u
Z2V0KCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNj
ZXNzKCktPm1fYW5pbWF0aW9uID0gbmV3IEFuaW1hdGlvbigpOworICAgIHJldHVybiByYXJlTm9u
SW5oZXJpdGVkRGF0YS0+bV9hbmltYXRpb24uZ2V0KCk7Cit9CisKIEFuaW1hdGlvbiogUmVuZGVy
U3R5bGU6OmFjY2Vzc1RyYW5zaXRpb25zKCkKIHsKICAgICBBbmltYXRpb24qIGxheWVyID0gcmFy
ZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbi5nZXQoKTsKQEAgLTE5MDEs
NCArMjA1NSwxNCBAQCBBbmltYXRpb24qIFJlbmRlclN0eWxlOjphY2Nlc3NUcmFuc2l0aW9ucygp
CiAgICAgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb24uZ2V0KCk7CiB9
CiAKK2NvbnN0IEFuaW1hdGlvbiogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShp
bnQgcHJvcGVydHkpCit7CisgICAgZm9yIChjb25zdCBBbmltYXRpb24qIHAgPSB0cmFuc2l0aW9u
cygpOyBwOyBwID0gcC0+bmV4dCgpKSB7CisgICAgICAgIGlmIChwLT5wcm9wZXJ0eSgpID09IGNB
bmltYXRlQWxsIHx8IHAtPnByb3BlcnR5KCkgPT0gcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHJl
dHVybiBwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAppbmRleCBiZWMyN2Q0Li5jNDgyNjM0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKQEAgLTcyLDYgKzcyLDcgQEAgY2xhc3MgQ1NT
VmFsdWVMaXN0OwogY2xhc3MgQ2FjaGVkSW1hZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKIGNs
YXNzIEN1cnNvckxpc3Q7CitjbGFzcyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBQYWlyOwogY2xhc3Mg
UmVuZGVyQXJlbmE7CiBjbGFzcyBTaGFkb3dWYWx1ZTsKQEAgLTEyNTcsNiArMTI1OCwxMSBAQCBw
cml2YXRlOgogICAgIGRvdWJsZSBtX3kyOwogfTsKIAorZW51bSBFQW5pbVBsYXlTdGF0ZSB7IAor
ICAgIEFuaW1QbGF5U3RhdGVQbGF5aW5nID0gMHgwLAorICAgIEFuaW1QbGF5U3RhdGVQYXVzZWQg
PSAweDEKK307CisKIGNsYXNzIEFuaW1hdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEFuaW1hdGlv
bj4gewogcHVibGljOgogICAgIEFuaW1hdGlvbigpOwpAQCAtMTI2NSwxMyArMTI3MSwyNCBAQCBw
dWJsaWM6CiAgICAgQW5pbWF0aW9uKiBuZXh0KCkgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAK
ICAgICBib29sIGlzRGVsYXlTZXQoKSBjb25zdCB7IHJldHVybiBtX2RlbGF5U2V0OyB9CisgICAg
Ym9vbCBpc0RpcmVjdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uU2V0OyB9CiAg
ICAgYm9vbCBpc0R1cmF0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvblNldDsgfQot
ICAgIGJvb2wgaXNUaW1pbmdGdW5jdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVu
Y3Rpb25TZXQ7IH0KKyAgICBib29sIGlzSXRlcmF0aW9uQ291bnRTZXQoKSBjb25zdCB7IHJldHVy
biBtX2l0ZXJhdGlvbkNvdW50U2V0OyB9CisgICAgYm9vbCBpc05hbWVTZXQoKSBjb25zdCB7IHJl
dHVybiBtX25hbWVTZXQ7IH0KKyAgICBib29sIGlzUGxheVN0YXRlU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9wbGF5U3RhdGVTZXQ7IH0KICAgICBib29sIGlzUHJvcGVydHlTZXQoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5U2V0OyB9CisgICAgYm9vbCBpc1RpbWluZ0Z1bmN0aW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvblNldDsgfQorCisgICAgLy8gaXMgdGhlIHNwZWNp
YWwgIm5vbmUiIGFuaW1hdGlvbiAoYW5pbWF0aW9uLW5hbWU6IG5vbmUpCisgICAgYm9vbCBpc05v
bmVBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lzTm9uZTsgfQorICAgIC8vIHdlIGNhbiBt
YWtlIHBsYWNlaG9sZGVyIEFuaW1hdGlvbiBvYmplY3RzIHRvIGtlZXAgdGhlIGNvbW1hLXNlcGFy
YXRlZCBsaXN0cworICAgIC8vIG9mIHByb3BlcnRpZXMgaW4gc3luYy4gaXNWYWxpZEFuaW1hdGlv
biBtZWFucyB0aGlzIGlzIG5vdCBhIHBsYWNlaG9sZGVyLgorICAgIGJvb2wgaXNWYWxpZEFuaW1h
dGlvbigpIGNvbnN0IHsgcmV0dXJuICFtX2lzTm9uZSAmJiAhbV9uYW1lLmlzRW1wdHkoKTsgfQog
CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAoIW1fZHVy
YXRpb25TZXQgJiYgIW1fZGVsYXlTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQgJiYgIW1fcHJv
cGVydHlTZXQpOworICAgICAgICByZXR1cm4gKCFtX2RpcmVjdGlvblNldCAmJiAhbV9kdXJhdGlv
blNldCAmJiAhbV9uYW1lU2V0ICYmICFtX3BsYXlTdGF0ZVNldCAmJiAKKyAgICAgICAgICAgICAg
ICFtX2l0ZXJhdGlvbkNvdW50U2V0ICYmICFtX2RlbGF5U2V0ICYmICFtX3RpbWluZ0Z1bmN0aW9u
U2V0ICYmICFtX3Byb3BlcnR5U2V0KTsKICAgICB9CiAKICAgICBib29sIGlzRW1wdHlPclplcm9E
dXJhdGlvbigpIGNvbnN0CkBAIC0xMjgwLDI3ICsxMjk3LDQ0IEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICB2b2lkIGNsZWFyRGVsYXkoKSB7IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQg
Y2xlYXJEaXJlY3Rpb24oKSB7IG1fZGlyZWN0aW9uU2V0ID0gZmFsc2U7IH0KICAgICB2b2lkIGNs
ZWFyRHVyYXRpb24oKSB7IG1fZHVyYXRpb25TZXQgPSBmYWxzZTsgfQotICAgIHZvaWQgY2xlYXJU
aW1pbmdGdW5jdGlvbigpIHsgbV90aW1pbmdGdW5jdGlvblNldCA9IGZhbHNlOyB9Ci0KKyAgICB2
b2lkIGNsZWFySXRlcmF0aW9uQ291bnQoKSB7IG1faXRlcmF0aW9uQ291bnRTZXQgPSBmYWxzZTsg
fQorICAgIHZvaWQgY2xlYXJOYW1lKCkgeyBtX25hbWVTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQg
Y2xlYXJQbGF5U3RhdGUoKSB7IG1fcGxheVN0YXRlU2V0ID0gQW5pbVBsYXlTdGF0ZVBsYXlpbmc7
IH0KICAgICB2b2lkIGNsZWFyUHJvcGVydHkoKSB7IG1fcHJvcGVydHlTZXQgPSBmYWxzZTsgfQor
ICAgIHZvaWQgY2xlYXJUaW1pbmdGdW5jdGlvbigpIHsgbV90aW1pbmdGdW5jdGlvblNldCA9IGZh
bHNlOyB9CiAKICAgICBkb3VibGUgZGVsYXkoKSBjb25zdCB7IHJldHVybiBtX2RlbGF5OyB9Cisg
ICAgYm9vbCBkaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQogICAgIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICBjb25zdCBU
aW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1
bmN0aW9uOyB9CisgICAgaW50IGl0ZXJhdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVy
YXRpb25Db3VudDsgfQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQorICAgIHVuc2lnbmVkIHBsYXlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0
YXRlOyB9CiAgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQor
ICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fdGltaW5nRnVuY3Rpb247IH0KKworICAgIGNvbnN0IFJlZlB0cjxLZXlmcmFtZUxpc3Q+JiBr
ZXlmcmFtZUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lTGlzdDsgfQogCiAgICAgdm9p
ZCBzZXREZWxheShkb3VibGUgYykgeyBtX2RlbGF5ID0gYzsgbV9kZWxheVNldCA9IHRydWU7IH0K
KyAgICB2b2lkIHNldERpcmVjdGlvbihib29sIGQpIHsgbV9kaXJlY3Rpb24gPSBkOyBtX2RpcmVj
dGlvblNldCA9IHRydWU7IH0KICAgICB2b2lkIHNldER1cmF0aW9uKGRvdWJsZSBkKSB7IEFTU0VS
VChkID49IDApOyBtX2R1cmF0aW9uID0gZDsgbV9kdXJhdGlvblNldCA9IHRydWU7IH0KLSAgICB2
b2lkIHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBmKSB7IG1fdGltaW5n
RnVuY3Rpb24gPSBmOyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0
SXRlcmF0aW9uQ291bnQoaW50IGMpIHsgbV9pdGVyYXRpb25Db3VudCA9IGM7IG1faXRlcmF0aW9u
Q291bnRTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbikgeyBt
X25hbWUgPSBuOyBtX25hbWVTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRQbGF5U3RhdGUodW5z
aWduZWQgZCkgeyBtX3BsYXlTdGF0ZSA9IGQ7IG1fcGxheVN0YXRlU2V0ID0gdHJ1ZTsgfQogICAg
IHZvaWQgc2V0UHJvcGVydHkoaW50IHQpIHsgbV9wcm9wZXJ0eSA9IHQ7IG1fcHJvcGVydHlTZXQg
PSB0cnVlOyB9CisgICAgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlv
biYgZikgeyBtX3RpbWluZ0Z1bmN0aW9uID0gZjsgbV90aW1pbmdGdW5jdGlvblNldCA9IHRydWU7
IH0KKworICAgIHZvaWQgc2V0SXNOb25lQW5pbWF0aW9uKGJvb2wgbikgeyBtX2lzTm9uZSA9IG47
IH0KKwogICAgIHZvaWQgc2V0TmV4dChBbmltYXRpb24qIG4pIHsgaWYgKG1fbmV4dC5nZXQoKSAh
PSBuKSB7IG1fbmV4dCA9IG47IH0gfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uS2V5ZnJhbWUoY29u
c3QgUmVmUHRyPEtleWZyYW1lTGlzdD4ga2V5ZnJhbWUpICB7IG1fa2V5ZnJhbWVMaXN0ID0ga2V5
ZnJhbWU7IH0KIAogICAgIEFuaW1hdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlvbiYgbyk7
CiAgICAgQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgbyk7CiAKICAgICAvLyByZXR1cm4gdHJ1
ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQot
ICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiogdCkgY29uc3Q7CisgICAg
Ym9vbCBhbmltYXRpb25zTWF0Y2goY29uc3QgQW5pbWF0aW9uKiB0LCBib29sIG1hdGNoUGxheVN0
YXRlcz10cnVlKSBjb25zdDsKIAogICAgIC8vIHJldHVybiB0cnVlIGV2ZXJ5IEFuaW1hdGlvbiBp
biB0aGUgY2hhaW4gKGRlZmluZWQgYnkgbV9uZXh0KSBtYXRjaCAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQW5pbWF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBhbmltYXRpb25zTWF0Y2goJm8p
ICYmICgobV9uZXh0ICYmIG8ubV9uZXh0KSA/ICgqbV9uZXh0ID09ICpvLm1fbmV4dCkgOiAobV9u
ZXh0ID09IG8ubV9uZXh0KSk7IH0KQEAgLTEzMDksMTUgKzEzNDMsMjggQEAgcHVibGljOgogICAg
IHZvaWQgZmlsbFVuc2V0UHJvcGVydGllcygpOwogCiBwcml2YXRlOgotICAgIGRvdWJsZSBtX2R1
cmF0aW9uOwotICAgIFRpbWluZ0Z1bmN0aW9uIG1fdGltaW5nRnVuY3Rpb247CiAgICAgZG91Ymxl
IG1fZGVsYXk7CisgICAgYm9vbCBtX2RpcmVjdGlvbjsKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsK
KyAgICBpbnQgbV9pdGVyYXRpb25Db3VudDsKKyAgICBTdHJpbmcgbV9uYW1lOwogICAgIGludCBt
X3Byb3BlcnR5OworICAgIFRpbWluZ0Z1bmN0aW9uIG1fdGltaW5nRnVuY3Rpb247CisKKyAgICBS
ZWZQdHI8S2V5ZnJhbWVMaXN0PiBtX2tleWZyYW1lTGlzdDsKKworICAgIHVuc2lnbmVkIG1fcGxh
eVN0YXRlICAgICA6IDI7CiAKLSAgICBib29sIG1fZHVyYXRpb25TZXQgICAgICAgOiAxOwotICAg
IGJvb2wgbV90aW1pbmdGdW5jdGlvblNldCA6IDE7CiAgICAgYm9vbCBtX2RlbGF5U2V0ICAgICAg
ICAgIDogMTsKKyAgICBib29sIG1fZGlyZWN0aW9uU2V0ICAgICAgOiAxOworICAgIGJvb2wgbV9k
dXJhdGlvblNldCAgICAgICA6IDE7CisgICAgYm9vbCBtX2l0ZXJhdGlvbkNvdW50U2V0IDogMTsK
KyAgICBib29sIG1fbmFtZVNldCAgICAgICAgICAgOiAxOworICAgIGJvb2wgbV9wbGF5U3RhdGVT
ZXQgICAgICA6IDE7CiAgICAgYm9vbCBtX3Byb3BlcnR5U2V0ICAgICAgIDogMTsKKyAgICBib29s
IG1fdGltaW5nRnVuY3Rpb25TZXQgOiAxOworICAgIAorICAgIGJvb2wgbV9pc05vbmUgICAgICAg
ICAgICA6IDE7CiAgICAgCiAgICAgUmVmUHRyPEFuaW1hdGlvbj4gbV9uZXh0OwogfTsKQEAgLTEz
NzMsNyArMTQyMCw5IEBAIHB1YmxpYzoKICAKICAgICBib29sIHNoYWRvd0RhdGFFcXVpdmFsZW50
KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wgcmVm
bGVjdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8p
IGNvbnN0OworICAgIGJvb2wgYW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJl
Tm9uSW5oZXJpdGVkRGF0YSYpIGNvbnN0OwogICAgIGJvb2wgdHJhbnNpdGlvbkRhdGFFcXVpdmFs
ZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZUtleWZyYW1lcyhjb25zdCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKTsKIAog
ICAgIGludCBsaW5lQ2xhbXA7IC8vIEFuIEFwcGxlIGV4dGVuc2lvbi4KICNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCkBAIC0xNDAwLDYgKzE0NDksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
UmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gbV9ib3hSZWZsZWN0OwogCisgICAgUmVmUHRyPEFuaW1h
dGlvbj4gbV9hbmltYXRpb247CiAgICAgUmVmUHRyPEFuaW1hdGlvbj4gbV90cmFuc2l0aW9uOwog
CiAgICAgRmlsbExheWVyIG1fbWFzazsKQEAgLTIwOTgsOCArMjE0OCwxNCBAQCBwdWJsaWM6CiAg
ICAgLy8gRW5kIENTUzMgR2V0dGVycwogCiAgICAgLy8gQXBwbGUtc3BlY2lmaWMgcHJvcGVydHkg
Z2V0dGVyIG1ldGhvZHMKKyAgICBBbmltYXRpb24qIGFjY2Vzc0FuaW1hdGlvbnMoKTsKICAgICBB
bmltYXRpb24qIGFjY2Vzc1RyYW5zaXRpb25zKCk7CisKKyAgICAvLyByZXR1cm4gdGhlIGZpcnN0
IGZvdW5kIEFuaW1hdGlvbiAoaW5jbHVkaW5nICdhbGwnIHRyYW5zaXRpb25zKQorICAgIGNvbnN0
IEFuaW1hdGlvbiogdHJhbnNpdGlvbkZvclByb3BlcnR5KGludCBwcm9wZXJ0eSk7CisgICAgY29u
c3QgQW5pbWF0aW9uKiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fYW5pbWF0aW9uLmdldCgpOyB9CiAgICAgY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb24u
Z2V0KCk7IH0KKwogICAgIGludCBsaW5lQ2xhbXAoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bGluZUNsYW1wOyB9CiAgICAgYm9vbCB0ZXh0U2l6ZUFkanVzdCgpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdDsgfQogICAgIEVUZXh0
U2VjdXJpdHkgdGV4dFNlY3VyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHRT
ZWN1cml0eT4ocmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0KQEAgLTIzNjMsOSAr
MjQxOSwxMyBAQCBwdWJsaWM6CiAgICAgLy8gRW5kIENTUzMgU2V0dGVycwogICAgCiAgICAgLy8g
QXBwbGUtc3BlY2lmaWMgcHJvcGVydHkgc2V0dGVycworICAgIHZvaWQgY2xlYXJBbmltYXRpb25z
KCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9hbmltYXRpb24gPSAwOyB9CiAg
ICAgdm9pZCBjbGVhclRyYW5zaXRpb25zKCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS0+bV90cmFuc2l0aW9uID0gMDsgfQorICAgIHZvaWQgaW5oZXJpdEFuaW1hdGlvbnMoY29uc3Qg
QW5pbWF0aW9uKiBwYXJlbnQpIHsgY2xlYXJBbmltYXRpb25zKCk7IGlmIChwYXJlbnQpIHJhcmVO
b25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1hdGlvbiA9IG5ldyBBbmltYXRpb24oKnBh
cmVudCk7IH0KICAgICB2b2lkIGluaGVyaXRUcmFuc2l0aW9ucyhjb25zdCBBbmltYXRpb24qIHBh
cmVudCkgeyBjbGVhclRyYW5zaXRpb25zKCk7IGlmIChwYXJlbnQpIHJhcmVOb25Jbmhlcml0ZWRE
YXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSBuZXcgQW5pbWF0aW9uKCpwYXJlbnQpOyB9Cisg
ICAgdm9pZCBhZGp1c3RBbmltYXRpb25zKCk7CiAgICAgdm9pZCBhZGp1c3RUcmFuc2l0aW9ucygp
OworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxl
U2VsZWN0b3IpIHsgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpKSByYXJlTm9uSW5oZXJp
dGVkRGF0YS5hY2Nlc3MoKS0+dXBkYXRlS2V5ZnJhbWVzKHN0eWxlU2VsZWN0b3IpOyB9CiAgICAg
dm9pZCBzZXRMaW5lQ2xhbXAoaW50IGMpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YSwg
bGluZUNsYW1wLCBjKTsgfQogICAgIHZvaWQgc2V0VGV4dFNpemVBZGp1c3QoYm9vbCBiKSB7IFNF
VF9WQVIocmFyZUluaGVyaXRlZERhdGEsIHRleHRTaXplQWRqdXN0LCBiKTsgfQogICAgIHZvaWQg
c2V0VGV4dFNlY3VyaXR5KEVUZXh0U2VjdXJpdHkgYVRleHRTZWN1cml0eSkgeyBTRVRfVkFSKHJh
cmVJbmhlcml0ZWREYXRhLCB0ZXh0U2VjdXJpdHksIGFUZXh0U2VjdXJpdHkpOyB9IApAQCAtMjUy
MiwxMCArMjU4MiwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIExlbmd0aCBpbml0aWFsVHJhbnNm
b3JtT3JpZ2luWSgpIHsgcmV0dXJuIExlbmd0aCg1MC4wLCBQZXJjZW50KTsgfQogICAgIAogICAg
IC8vIEtlZXAgdGhlc2UgYXQgdGhlIGVuZC4KLSAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbERlbGF5
KCkgeyByZXR1cm4gMDsgfQotICAgIHN0YXRpYyBkb3VibGUgaW5pdGlhbER1cmF0aW9uKCkgeyBy
ZXR1cm4gMDsgfQotICAgIHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsVGltaW5nRnVuY3Rp
b24oKSB7IHJldHVybiBUaW1pbmdGdW5jdGlvbigpOyB9Ci0gICAgc3RhdGljIGludCBpbml0aWFs
UHJvcGVydHkoKSB7IHJldHVybiBjQW5pbWF0ZUFsbDsgfQorICAgIHN0YXRpYyBmbG9hdCBpbml0
aWFsQW5pbWF0aW9uRGVsYXkoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGJvb2wgaW5pdGlh
bEFuaW1hdGlvbkRpcmVjdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGRvdWJs
ZSBpbml0aWFsQW5pbWF0aW9uRHVyYXRpb24oKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIGlu
dCBpbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSB7IHJldHVybiAxOyB9CisgICAgc3Rh
dGljIFN0cmluZyBpbml0aWFsQW5pbWF0aW9uTmFtZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSB7IHJldHVybiBB
bmltUGxheVN0YXRlUGxheWluZzsgfQorICAgIHN0YXRpYyBpbnQgaW5pdGlhbEFuaW1hdGlvblBy
b3BlcnR5KCkgeyByZXR1cm4gY0FuaW1hdGVBbGw7IH0KKyAgICBzdGF0aWMgVGltaW5nRnVuY3Rp
b24gaW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkgeyByZXR1cm4gVGltaW5nRnVuY3Rp
b24oKTsgfQogICAgIHN0YXRpYyBpbnQgaW5pdGlhbExpbmVDbGFtcCgpIHsgcmV0dXJuIC0xOyB9
CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbFRleHRTaXplQWRqdXN0KCkgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHN0YXRpYyBFVGV4dFNlY3VyaXR5IGluaXRpYWxUZXh0U2VjdXJpdHkoKSB7IHJldHVy
biBUU05PTkU7IH0KQEAgLTI1MzUsNiArMjU5OSw1MCBAQCBwdWJsaWM6CiAjZW5kaWYKIH07CiAK
KyNwcmFnbWEgbWFyayAtCisKK2NsYXNzIEtleWZyYW1lVmFsdWUgeworcHVibGljOgorICAgIEtl
eWZyYW1lVmFsdWUoKSA6IGtleSgtMSkgeyB9CisgICAgZmxvYXQga2V5OworICAgIFJlbmRlclN0
eWxlIHN0eWxlOworfTsKKworY2xhc3MgS2V5ZnJhbWVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8
S2V5ZnJhbWVMaXN0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8S2V5ZnJhbWVM
aXN0PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBpbkFuaW1OYW1lKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgS2V5ZnJhbWVMaXN0KGluQW5pbU5hbWUpKTsgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQorICAg
IAorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9uTmFtZTsgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KGZsb2F0IGluS2V5LCBj
b25zdCBSZW5kZXJTdHlsZSYgaW5TdHlsZSk7CisgICAgCisgICAgdm9pZCBhZGRQcm9wZXJ0eShp
bnQgcHJvcCkgeyBtX3Byb3BlcnRpZXMuYWRkKHByb3ApOyB9CisgICAgYm9vbCBjb250YWluc1By
b3BlcnR5KGludCBwcm9wKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuY29udGFpbnMocHJv
cCk7IH0KKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luUHJvcGVydGllcygp
IHsgcmV0dXJuIG1fcHJvcGVydGllcy5iZWdpbigpOyB9CisgICAgSGFzaFNldDxpbnQ+Ojpjb25z
dF9pdGVyYXRvciBlbmRQcm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmVuZCgpOyB9
CisgICAgCisgICAgdm9pZCBjbGVhcigpIHsgbV9rZXlmcmFtZXMuY2xlYXIoKTsgbV9wcm9wZXJ0
aWVzLmNsZWFyKCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZy
YW1lcy5pc0VtcHR5KCk7IH0KKyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luS2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuYmVnaW4oKTsg
fQorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZW5kS2V5ZnJhbWVz
KCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAgICBL
ZXlmcmFtZUxpc3QoY29uc3QgQXRvbWljU3RyaW5nJiBpbkFuaW1OYW1lKQorICAgIDogbV9hbmlt
YXRpb25OYW1lKGluQW5pbU5hbWUpCisgICAgeworICAgICAgICBpbnNlcnQoMCwgUmVuZGVyU3R5
bGUoKSk7CisgICAgICAgIGluc2VydCgxLCBSZW5kZXJTdHlsZSgpKTsKKyAgICB9CisgICAgICAg
IAorcHJvdGVjdGVkOgorICAgIEF0b21pY1N0cmluZyBtX2FuaW1hdGlvbk5hbWU7CisgICAgVmVj
dG9yPEtleWZyYW1lVmFsdWU+IG1fa2V5ZnJhbWVzOworICAgIEhhc2hTZXQ8aW50PiBtX3Byb3Bl
cnRpZXM7ICAgICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGFuaW1hdGVkCit9OworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22579</attachid>
            <date>2008-07-31 10:45:32 -0700</date>
            <delta_ts>2008-07-31 10:45:32 -0700</delta_ts>
            <desc>Second update to patch</desc>
            <filename>patch5-renderstyle-animation-attributes-update2.patch</filename>
            <type>text/plain</type>
            <size>29314</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Yi9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IGIyMzZi
MTAuLmZiODViZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtMTA2OCw3ICsxMDY4LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKCp0
KVtpXS0+ZGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5KCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
RHVyYXRpb246IHsKQEAgLTEwNzksNyArMTA3OSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVy
CiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKCgqdClbaV0tPmR1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKFJlbmRlclN0eWxlOjppbml0aWFsRHVyYXRpb24o
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRp
b25EdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAgICAgICAgICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiB7CkBAIC0xMDkyLDcgKzEwOTIsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9u
JiB0ZiA9IFJlbmRlclN0eWxlOjppbml0aWFsVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1h
dGlvblRpbWluZ0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55
MigpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDI0ZDc1YmQuLmY2YjM3OGMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0xOTksNyArMTk5LDcgQEAgaWYgKGlzSW5oZXJpdCkgeyBc
CiB9IFwKIGlmIChpc0luaXRpYWwpIHsgXAogICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0
eWxlLT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCi0gICAgKCpsaXN0KVswXS0+c2V0IyNQcm9wKFJl
bmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCisgICAgKCpsaXN0KVswXS0+c2V0IyNQcm9w
KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uIyNQcm9wKCkpOyBcCiAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgXAogICAgICAgICAoKmxpc3QpWzBdLT5j
bGVhciMjUHJvcCgpOyBcCiB9CkBAIC01MDA0LDcgKzUwMDQsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVl
KQogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBEdXJhdGlvbihBbmltYXRpb24qIHRyYW5zaXRp
b24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09
IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlv
bihSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpOworICAgICAgICB0cmFuc2l0aW9uLT5z
ZXREdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MDIxLDcgKzUwMjEsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hcER1cmF0aW9uKEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBEZWxheShBbmltYXRpb24qIHRyYW5zaXRp
b24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09
IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxheShS
ZW5kZXJTdHlsZTo6aW5pdGlhbERlbGF5KCkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREZWxh
eShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5KCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01MDM5LDcgKzUwMzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cERlbGF5KEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBUaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIHRyYW5zaXRpb24sIENT
U1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1Zh
bHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlv
bihSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCkpOworICAgICAgICB0cmFuc2l0
aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvblRpbWlu
Z0Z1bmN0aW9uKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTA3NCw3ICs1
MDc0LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUaW1pbmdGdW5jdGlvbihBbmltYXRp
b24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwUHJvcGVydHkoQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsK
LSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoUmVuZGVyU3R5bGU6OmluaXRpYWxQcm9w
ZXJ0eSgpKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHkoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBbmltYXRpb25Qcm9wZXJ0eSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9w
YWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDdlOGU5M2IuLjA1MWYyZTggMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIHN0YXJ0VGltZXIoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAor
ICAgIHZvaWQgc3RhcnRUaW1lcihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGludCBwcm9wZXJ0eSwgYm9vbCByZXNldCwKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKICAgICB7CiAg
ICAgICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7CkBAIC0xOTEsNyArMTkxLDcgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoKTsKLSAgICBib29sIHN1c3BlbmRlZCgpIGNvbnN0ICAgICAgeyByZXR1cm4gbV9zdXNw
ZW5kZWQ7IH0KKyAgICBib29sIHN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVk
OyB9CiAgICAgCiAgICAgdm9pZCBvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVy
dHkpOwogICAgIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJv
cGVydHkpOwpAQCAtMjE1LDcgKzIxNSw3IEBAIHByaXZhdGU6CiAKIGNsYXNzIEFuaW1hdGlvbkJh
c2UgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoY29u
c3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBBbmltKTsgICAgCisgICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmlt
YXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcEFuaW0pOwogICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKQogICAgIHsKICAg
ICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfQVZBSUxBQkxF
KQpAQCAtMzA4LDcgKzMwOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmly
ZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgdm9pZCBhbmltYXRp
b25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJs
ZSBlbGFwc2VkVGltZSk7Ci0gICAgdm9pZCBhbmltYXRpb25FdmVudERpc3BhdGNoZXJGaXJlZChF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBwcm9wZXJ0eSwg
Ym9vbCByZXNldCwgCisgICAgdm9pZCBhbmltYXRpb25FdmVudERpc3BhdGNoZXJGaXJlZChFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBwcm9wZXJ0eSwgYm9v
bCByZXNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpOwogICAgIAogICAgIGJv
b2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiogYW5pbSkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb24tPmFuaW1hdGlvbnNNYXRjaChhbmltKTsgfQpAQCAtNjk4LDcgKzY5OCw3IEBA
IHZvaWQgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkCiAgICAgfQogfQogCi12b2lkIEFuaW1hdGlvbkJhc2U6
OmFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlckZpcmVkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCAKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6YW5p
bWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lLCBpbnQgcHJvcGVydHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCiB7CiAgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQg
PSBmYWxzZTsKQEAgLTE3NDAsMTcgKzE3NDAsMTEgQEAgYm9vbCBBbmltYXRpb25Db250cm9sbGVy
Ojppc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHAK
IAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVudCog
ZG9jdW1lbnQpCiB7Ci0jaWZkZWYgREVCVUdfU1RBVEVfTUFDSElORQotICAgIGZwcmludGYoc3Rk
ZXJyLCAiQW5pbWF0aW9uQ29udHJvbGxlciAlcCBzdXNwZW5kQW5pbWF0aW9ucyBmb3IgZG9jdW1l
bnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKLSNlbmRpZgogICAgIG1fZGF0YS0+c3VzcGVuZEFu
aW1hdGlvbnMoZG9jdW1lbnQpOwogfQogCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KQogewotI2lmZGVmIERFQlVHX1NUQVRFX01B
Q0hJTkUKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAgcmVzdW1l
QW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKLSNlbmRpZgog
ICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9ucyhkb2N1bWVudCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCBlOGZjZDJhLi43YjIzNmNkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC02NjQsNjEgKzY2NCwxNTMgQEAg
VHJhbnNmb3JtT3BlcmF0aW9uKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiogZnIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmcm9tRiArIChtX2YgLSBmcm9tRikgKiBwcm9ncmVzcyk7CiB9CiAKK2Jvb2wgS2V5
ZnJhbWVMaXN0OjpvcGVyYXRvcj09KGNvbnN0IEtleWZyYW1lTGlzdCYgbykgY29uc3QKK3sKKyAg
ICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpICE9IG8ubV9rZXlmcmFtZXMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29u
c3RfaXRlcmF0b3IgaXQyID0gby5tX2tleWZyYW1lcy5iZWdpbigpOyAgICAKKyAgICBmb3IgKFZl
Y3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQxID0gbV9rZXlmcmFtZXMuYmVn
aW4oKTsgaXQxICE9IG1fa2V5ZnJhbWVzLmVuZCgpOyArK2l0MSkgeworICAgICAgICBpZiAoaXQx
LT5rZXkgIT0gaXQyLT5rZXkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZTEgPSBpdDEtPnN0eWxlOworICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUyID0gaXQyLT5zdHlsZTsKKyAgICAgICAgaWYgKCEoc3R5bGUxID09IHN0
eWxlMikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsraXQyOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZAorS2V5ZnJhbWVMaXN0OjppbnNlcnQo
ZmxvYXQgaW5LZXksIGNvbnN0IFJlbmRlclN0eWxlJiBpblN0eWxlKQoreworICAgIGlmIChpbktl
eSA8IDAgfHwgaW5LZXkgPiAxKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fa2V5ZnJhbWVzW2ldLmtleSA9PSBpbktleSkgeworICAgICAgICAgICAgbV9rZXlmcmFtZXNb
aV0uc3R5bGUgPSBpblN0eWxlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmIChtX2tleWZyYW1lc1tpXS5rZXkgPiBpbktleSkgeworICAgICAgICAgICAgLy8gaW5z
ZXJ0IGJlZm9yZQorICAgICAgICAgICAgbV9rZXlmcmFtZXMuaW5zZXJ0KGksIEtleWZyYW1lVmFs
dWUoKSk7CisgICAgICAgICAgICBtX2tleWZyYW1lc1tpXS5rZXkgPSBpbktleTsKKyAgICAgICAg
ICAgIG1fa2V5ZnJhbWVzW2ldLnN0eWxlID0gaW5TdHlsZTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBhcHBlbmQKKyAgICBtX2tleWZyYW1lcy5h
cHBlbmQoS2V5ZnJhbWVWYWx1ZSgpKTsKKyAgICBtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXpl
KCktMV0ua2V5ID0gaW5LZXk7CisgICAgbV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6ZSgpLTFd
LnN0eWxlID0gaW5TdHlsZTsKK30KKwogQW5pbWF0aW9uOjpBbmltYXRpb24oKQotICAgIDogbV9k
dXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpCi0gICAgLCBtX3RpbWluZ0Z1
bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVGltaW5nRnVuY3Rpb24oKSkKLSAgICAsIG1fZGVs
YXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpKQotICAgICwgbV9wcm9wZXJ0eShSZW5kZXJT
dHlsZTo6aW5pdGlhbFByb3BlcnR5KCkpCi0gICAgLCBtX2R1cmF0aW9uU2V0KGZhbHNlKQotICAg
ICwgbV90aW1pbmdGdW5jdGlvblNldChmYWxzZSkKKyAgICA6IG1fZGVsYXkoUmVuZGVyU3R5bGU6
OmluaXRpYWxBbmltYXRpb25EZWxheSgpKQorICAgICwgbV9kaXJlY3Rpb24oUmVuZGVyU3R5bGU6
OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSkKKyAgICAsIG1fZHVyYXRpb24oUmVuZGVyU3R5
bGU6OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpKQorICAgICwgbV9pdGVyYXRpb25Db3VudChS
ZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpCisgICAgLCBtX25h
bWUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25OYW1lKCkpCisgICAgLCBtX3Byb3BlcnR5
KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSkKKyAgICAsIG1fdGltaW5n
RnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKQor
ICAgICwgbV9wbGF5U3RhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUo
KSkKICAgICAsIG1fZGVsYXlTZXQoZmFsc2UpCisgICAgLCBtX2RpcmVjdGlvblNldChmYWxzZSkK
KyAgICAsIG1fZHVyYXRpb25TZXQoZmFsc2UpCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50U2V0KGZh
bHNlKQorICAgICwgbV9uYW1lU2V0KGZhbHNlKQorICAgICwgbV9wbGF5U3RhdGVTZXQoZmFsc2Up
CiAgICAgLCBtX3Byb3BlcnR5U2V0KGZhbHNlKQorICAgICwgbV90aW1pbmdGdW5jdGlvblNldChm
YWxzZSkKKyAgICAsIG1faXNOb25lKGZhbHNlKQogewogfQogCiBBbmltYXRpb246OkFuaW1hdGlv
bihjb25zdCBBbmltYXRpb24mIG8pCiAgICAgOiBSZWZDb3VudGVkPEFuaW1hdGlvbj4oKQotICAg
ICwgbV9kdXJhdGlvbihvLm1fZHVyYXRpb24pCi0gICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG8ubV90
aW1pbmdGdW5jdGlvbikKICAgICAsIG1fZGVsYXkoby5tX2RlbGF5KQorICAgICwgbV9kaXJlY3Rp
b24oby5tX2RpcmVjdGlvbikKKyAgICAsIG1fZHVyYXRpb24oby5tX2R1cmF0aW9uKQorICAgICwg
bV9pdGVyYXRpb25Db3VudChvLm1faXRlcmF0aW9uQ291bnQpCisgICAgLCBtX25hbWUoby5tX25h
bWUpCiAgICAgLCBtX3Byb3BlcnR5KG8ubV9wcm9wZXJ0eSkKLSAgICAsIG1fZHVyYXRpb25TZXQo
by5tX2R1cmF0aW9uU2V0KQotICAgICwgbV90aW1pbmdGdW5jdGlvblNldChvLm1fdGltaW5nRnVu
Y3Rpb25TZXQpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG8ubV90aW1pbmdGdW5jdGlvbikKKyAg
ICAsIG1fcGxheVN0YXRlKG8ubV9wbGF5U3RhdGUpCiAgICAgLCBtX2RlbGF5U2V0KG8ubV9kZWxh
eVNldCkKKyAgICAsIG1fZGlyZWN0aW9uU2V0KG8ubV9kaXJlY3Rpb25TZXQpCisgICAgLCBtX2R1
cmF0aW9uU2V0KG8ubV9kdXJhdGlvblNldCkKKyAgICAsIG1faXRlcmF0aW9uQ291bnRTZXQoby5t
X2l0ZXJhdGlvbkNvdW50U2V0KQorICAgICwgbV9uYW1lU2V0KG8ubV9uYW1lU2V0KQorICAgICwg
bV9wbGF5U3RhdGVTZXQoby5tX3BsYXlTdGF0ZVNldCkKICAgICAsIG1fcHJvcGVydHlTZXQoby5t
X3Byb3BlcnR5U2V0KQorICAgICwgbV90aW1pbmdGdW5jdGlvblNldChvLm1fdGltaW5nRnVuY3Rp
b25TZXQpCisgICAgLCBtX2lzTm9uZShvLm1faXNOb25lKQogewogfQogCiBBbmltYXRpb24mIEFu
aW1hdGlvbjo6b3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlvbiYgbykKIHsKICAgICBtX2RlbGF5ID0g
by5tX2RlbGF5OworICAgIG1fZGlyZWN0aW9uID0gby5tX2RpcmVjdGlvbjsKICAgICBtX2R1cmF0
aW9uID0gby5tX2R1cmF0aW9uOwotICAgIG1fdGltaW5nRnVuY3Rpb24gPSBvLm1fdGltaW5nRnVu
Y3Rpb247CisgICAgbV9pdGVyYXRpb25Db3VudCA9IG8ubV9pdGVyYXRpb25Db3VudDsKKyAgICBt
X25hbWUgPSBvLm1fbmFtZTsKKyAgICBtX3BsYXlTdGF0ZSA9IG8ubV9wbGF5U3RhdGU7CiAgICAg
bV9wcm9wZXJ0eSA9IG8ubV9wcm9wZXJ0eTsKKyAgICBtX3RpbWluZ0Z1bmN0aW9uID0gby5tX3Rp
bWluZ0Z1bmN0aW9uOwogCiAgICAgbV9kZWxheVNldCA9IG8ubV9kZWxheVNldDsKKyAgICBtX2Rp
cmVjdGlvblNldCA9IG8ubV9kaXJlY3Rpb25TZXQ7CiAgICAgbV9kdXJhdGlvblNldCA9IG8ubV9k
dXJhdGlvblNldDsKLSAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gby5tX3RpbWluZ0Z1bmN0aW9u
U2V0OworICAgIG1faXRlcmF0aW9uQ291bnRTZXQgPSBvLm1faXRlcmF0aW9uQ291bnRTZXQ7Cisg
ICAgbV9uYW1lU2V0ID0gby5tX25hbWVTZXQ7CisgICAgbV9wbGF5U3RhdGVTZXQgPSBvLm1fcGxh
eVN0YXRlU2V0OwogICAgIG1fcHJvcGVydHlTZXQgPSBvLm1fcHJvcGVydHlTZXQ7CisgICAgbV90
aW1pbmdGdW5jdGlvblNldCA9IG8ubV90aW1pbmdGdW5jdGlvblNldDsKKworICAgIG1faXNOb25l
ID0gby5tX2lzTm9uZTsKIAogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9vbCBBbmltYXRpb246
OmFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24qIG8pIGNvbnN0Citib29sIEFuaW1hdGlv
bjo6YW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiogbywgYm9vbCBtYXRjaFBsYXlTdGF0
ZXMgLyogPSB0cnVlICovKSBjb25zdAogewogICAgIGlmICghbykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIGJvb2wgcmVzdWx0ID0gbV9kdXJhdGlvbiA9PSBvLT5tX2R1cmF0aW9u
ICYmCi0gICAgICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uID09IG8tPm1fdGltaW5nRnVu
Y3Rpb24gJiYKLSAgICAgICAgICAgICAgICAgIG1fZGVsYXkgPT0gby0+bV9kZWxheSAmJgorICAg
IGJvb2wgcmVzdWx0ID0gbV9kZWxheSA9PSBvLT5tX2RlbGF5ICYmCisgICAgICAgICAgICAgICAg
ICBtX2RpcmVjdGlvbiA9PSBvLT5tX2RpcmVjdGlvbiAmJgorICAgICAgICAgICAgICAgICAgbV9k
dXJhdGlvbiA9PSBvLT5tX2R1cmF0aW9uICYmCisgICAgICAgICAgICAgICAgICBtX2l0ZXJhdGlv
bkNvdW50ID09IG8tPm1faXRlcmF0aW9uQ291bnQgJiYKKyAgICAgICAgICAgICAgICAgIG1fbmFt
ZSA9PSBvLT5tX25hbWUgJiYKICAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHkgPT0gby0+bV9w
cm9wZXJ0eSAmJiAKLSAgICAgICAgICAgICAgICAgIG1fZHVyYXRpb25TZXQgPT0gby0+bV9kdXJh
dGlvblNldCAmJiAKLSAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby0+
bV90aW1pbmdGdW5jdGlvblNldCAmJiAKKyAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rp
b24gPT0gby0+bV90aW1pbmdGdW5jdGlvbiAmJgogICAgICAgICAgICAgICAgICAgbV9kZWxheVNl
dCA9PSBvLT5tX2RlbGF5U2V0ICYmCi0gICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5U2V0ID09
IG8tPm1fcHJvcGVydHlTZXQ7CisgICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvblNldCA9PSBv
LT5tX2RpcmVjdGlvblNldCAmJgorICAgICAgICAgICAgICAgICAgbV9kdXJhdGlvblNldCA9PSBv
LT5tX2R1cmF0aW9uU2V0ICYmCisgICAgICAgICAgICAgICAgICBtX2l0ZXJhdGlvbkNvdW50U2V0
ID09IG8tPm1faXRlcmF0aW9uQ291bnRTZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fbmFtZVNl
dCA9PSBvLT5tX25hbWVTZXQgJiYgCisgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5U2V0ID09
IG8tPm1fcHJvcGVydHlTZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25T
ZXQgPT0gby0+bV90aW1pbmdGdW5jdGlvblNldCAmJgorICAgICAgICAgICAgICAgICAgbV9pc05v
bmUgPT0gby0+bV9pc05vbmU7CisgICAgCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBpZiAobWF0Y2hQbGF5U3RhdGVzICYmIChtX3BsYXlTdGF0ZSAh
PSBvLT5tX3BsYXlTdGF0ZSB8fCBtX3BsYXlTdGF0ZVNldCAhPSBvLT5tX3BsYXlTdGF0ZVNldCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBub3cgY2hlY2sga2V5ZnJhbWVz
CisgICAgaWYgKChtX2tleWZyYW1lTGlzdC5nZXQoKSAmJiAhby0+bV9rZXlmcmFtZUxpc3QuZ2V0
KCkpIHx8ICghbV9rZXlmcmFtZUxpc3QuZ2V0KCkgJiYgby0+bV9rZXlmcmFtZUxpc3QuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEobV9rZXlmcmFtZUxpc3QuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKm1fa2V5ZnJhbWVMaXN0ID09ICpv
LT5tX2tleWZyYW1lTGlzdDsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZGVmaW5l
IEZJTExfVU5TRVRfUFJPUEVSVFkodGVzdCwgcHJvcEdldCwgcHJvcFNldCkgXApAQCAtNzMyLDcg
KzgyNCwxMSBAQCB2b2lkIEFuaW1hdGlvbkxpc3Q6OmZpbGxVbnNldFByb3BlcnRpZXMoKQogewog
ICAgIHNpemVfdCBpOwogICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEZWxheVNldCwgZGVsYXks
IHNldERlbGF5KTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzRGlyZWN0aW9uU2V0LCBkaXJl
Y3Rpb24sIHNldERpcmVjdGlvbik7CiAgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0R1cmF0aW9u
U2V0LCBkdXJhdGlvbiwgc2V0RHVyYXRpb24pOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNJ
dGVyYXRpb25Db3VudFNldCwgaXRlcmF0aW9uQ291bnQsIHNldEl0ZXJhdGlvbkNvdW50KTsKKyAg
ICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzUGxheVN0YXRlU2V0LCBwbGF5U3RhdGUsIHNldFBsYXlT
dGF0ZSk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc05hbWVTZXQsIG5hbWUsIHNldE5hbWUp
OwogICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNUaW1pbmdGdW5jdGlvblNldCwgdGltaW5nRnVu
Y3Rpb24sIHNldFRpbWluZ0Z1bmN0aW9uKTsKICAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzUHJv
cGVydHlTZXQsIHByb3BlcnR5LCBzZXRQcm9wZXJ0eSk7CiB9CkBAIC03NjAsNiArODU2LDcgQEAg
U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSgpCiAg
ICAgLCBtX2FwcGVhcmFuY2UoUmVuZGVyU3R5bGU6OmluaXRpYWxBcHBlYXJhbmNlKCkpCiAgICAg
LCBtX2JvcmRlckZpdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlckZpdCgpKQogICAgICwgbV9i
b3hTaGFkb3coMCkKKyAgICAsIG1fYW5pbWF0aW9ucygwKQogICAgICwgbV90cmFuc2l0aW9ucygw
KQogICAgICwgbV9tYXNrKEZpbGxMYXllcihNYXNrRmlsbExheWVyKSkKICNpZiBFTkFCTEUoWEJM
KQpAQCAtNzg3LDYgKzg4NCw3IEBAIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OlN0eWxlUmFy
ZU5vbkluaGVyaXRlZERhdGEoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkCiAgICAgLCBtX2Jv
cmRlckZpdChvLm1fYm9yZGVyRml0KQogICAgICwgbV9ib3hTaGFkb3coby5tX2JveFNoYWRvdyA/
IG5ldyBTaGFkb3dEYXRhKCpvLm1fYm94U2hhZG93KSA6IDApCiAgICAgLCBtX2JveFJlZmxlY3Qo
by5tX2JveFJlZmxlY3QpCisgICAgLCBtX2FuaW1hdGlvbnMoby5tX2FuaW1hdGlvbnMgPyBuZXcg
QW5pbWF0aW9uTGlzdCgqby5tX2FuaW1hdGlvbnMpIDogMCkKICAgICAsIG1fdHJhbnNpdGlvbnMo
by5tX3RyYW5zaXRpb25zID8gbmV3IEFuaW1hdGlvbkxpc3QoKm8ubV90cmFuc2l0aW9ucykgOiAw
KQogICAgICwgbV9tYXNrKG8ubV9tYXNrKQogICAgICwgbV9tYXNrQm94SW1hZ2Uoby5tX21hc2tC
b3hJbWFnZSkKQEAgLTg0MCw2ICs5MzgsNyBAQCBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgYwogICAg
ICAgICAmJiBtX2JvcmRlckZpdCA9PSBvLm1fYm9yZGVyRml0CiAgICAgICAgICYmIHNoYWRvd0Rh
dGFFcXVpdmFsZW50KG8pCiAgICAgICAgICYmIHJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudChvKQor
ICAgICAgICAmJiBhbmltYXRpb25EYXRhRXF1aXZhbGVudChvKQogICAgICAgICAmJiB0cmFuc2l0
aW9uRGF0YUVxdWl2YWxlbnQobykKICAgICAgICAgJiYgbV9tYXNrID09IG8ubV9tYXNrCiAgICAg
ICAgICYmIG1fbWFza0JveEltYWdlID09IG8ubV9tYXNrQm94SW1hZ2UKQEAgLTg2OSw2ICs5Njgs
MjggQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpyZWZsZWN0aW9uRGF0YUVxdWl2
YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXIKIAogfQogCit2b2lkIFN0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGE6OnVwZGF0ZUtleWZyYW1lcyhjb25zdCBDU1NTdHlsZVNlbGVjdG9yKiBzdHls
ZVNlbGVjdG9yKQoreworICAgIGlmIChtX2FuaW1hdGlvbnMpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoKCptX2FuaW1hdGlvbnMpW2ldLT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXaGVuIGtleWZyYW1lcyBoYXZlIGJlZW4gcGFyc2VkLCBleGVjdXRlIHRoaXMgY29k
ZS4KKyAgICAgICAgICAgICAgICAvLyBSZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSA9IHN0
eWxlU2VsZWN0b3ItPmZpbmRLZXlmcmFtZVJ1bGUoKCptX2FuaW1hdGlvbnMpW2ldLT5uYW1lKCkp
OworICAgICAgICAgICAgICAgIC8vICgqbV9hbmltYXRpb25zKVtpXS0+c2V0QW5pbWF0aW9uS2V5
ZnJhbWUoa2V5ZnJhbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiti
b29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6OmFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KGNv
bnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0Cit7CisgICAgaWYgKCFtX2Fu
aW1hdGlvbnMgJiYgby5tX2FuaW1hdGlvbnMgfHwgbV9hbmltYXRpb25zICYmICFvLm1fYW5pbWF0
aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2FuaW1hdGlvbnMgJiYgby5t
X2FuaW1hdGlvbnMgJiYgKCptX2FuaW1hdGlvbnMgIT0gKm8ubV9hbmltYXRpb25zKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIFN0eWxlUmFyZU5v
bkluaGVyaXRlZERhdGE6OnRyYW5zaXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdAogewogICAgIGlmICghbV90cmFuc2l0aW9ucyAmJiBv
Lm1fdHJhbnNpdGlvbnMgfHwgbV90cmFuc2l0aW9ucyAmJiAhby5tX3RyYW5zaXRpb25zKQpAQCAt
MTg0Myw2ICsxOTY0LDM0IEBAIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIFJl
bmRlclN0eWxlOjpub25lRGFzaGJvYXJkUmVnaW9ucygpCiB9CiAjZW5kaWYKIAordm9pZCBSZW5k
ZXJTdHlsZTo6YWRqdXN0QW5pbWF0aW9ucygpCit7CisgICAgQW5pbWF0aW9uTGlzdCogYW5pbWF0
aW9uTGlzdCA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FuaW1hdGlvbnM7CisgICAgaWYgKCFh
bmltYXRpb25MaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYW5pbWF0aW9uTGlzdC0+
c2l6ZSgpID09IDApIHsKKyAgICAgICAgY2xlYXJBbmltYXRpb25zKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBnZXQgcmlkIG9mIGVtcHR5IHRyYW5zaXRpb25zIGFuZCBhbnl0
aGluZyBiZXlvbmQgdGhlbQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9uTGlz
dC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCgqYW5pbWF0aW9uTGlzdClbaV0tPmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgYW5pbWF0aW9uTGlzdC0+cmVzaXplKGkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGFuaW1hdGlvbkxpc3Qt
PnNpemUoKSA9PSAwKSB7CisgICAgICAgIGNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIC8vIFJlcGVhdCBwYXR0ZXJucyBpbnRvIGxheWVycyB0aGF0
IGRvbid0IGhhdmUgc29tZSBwcm9wZXJ0aWVzIHNldC4KKyAgICBhbmltYXRpb25MaXN0LT5maWxs
VW5zZXRQcm9wZXJ0aWVzKCk7Cit9CisKIHZvaWQgUmVuZGVyU3R5bGU6OmFkanVzdFRyYW5zaXRp
b25zKCkKIHsKICAgICBBbmltYXRpb25MaXN0KiB0cmFuc2l0aW9uTGlzdCA9IHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX3RyYW5zaXRpb25zOwpAQCAtMTg4Myw2ICsyMDMyLDE0IEBAIHZvaWQgUmVu
ZGVyU3R5bGU6OmFkanVzdFRyYW5zaXRpb25zKCkKICAgICB9CiB9CiAKK0FuaW1hdGlvbkxpc3Qq
IFJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zKCkKK3sKKyAgICBBbmltYXRpb25MaXN0KiBs
aXN0ID0gcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9uczsKKyAgICBp
ZiAoIWxpc3QpCisgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1h
dGlvbnMgPSBuZXcgQW5pbWF0aW9uTGlzdCgpOworICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9hbmltYXRpb25zOworfQorCiBBbmltYXRpb25MaXN0KiBSZW5kZXJTdHlsZTo6YWNj
ZXNzVHJhbnNpdGlvbnMoKQogewogICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSByYXJlTm9uSW5o
ZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uczsKQEAgLTE4OTEsNCArMjA0OCwxNyBA
QCBBbmltYXRpb25MaXN0KiBSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMoKQogICAgIHJl
dHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uczsKIH0KIAorY29uc3QgQW5p
bWF0aW9uKiBSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbkZvclByb3BlcnR5KGludCBwcm9wZXJ0eSkK
K3sKKyAgICBpZiAodHJhbnNpdGlvbnMoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBBbmlt
YXRpb24qIHAgPSAoKnRyYW5zaXRpb25zKCkpW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKHAt
PnByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwgfHwgcC0+cHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAppbmRleCBlMTIxMjdmLi5iNjdiYWMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgKQEAgLTcyLDYgKzcyLDcgQEAgY2xhc3MgQ1NTVmFsdWVMaXN0OwogY2xhc3MgQ2Fj
aGVkSW1hZ2U7CiBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKIGNsYXNzIEN1cnNvckxpc3Q7CitjbGFz
cyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBQYWlyOwogY2xhc3MgUmVuZGVyQXJlbmE7CiBjbGFzcyBT
aGFkb3dWYWx1ZTsKQEAgLTEyNTcsMTkgKzEyNTgsMzUgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
bV95MjsKIH07CiAKK2VudW0gRUFuaW1QbGF5U3RhdGUgeworICAgIEFuaW1QbGF5U3RhdGVQbGF5
aW5nID0gMHgwLAorICAgIEFuaW1QbGF5U3RhdGVQYXVzZWQgPSAweDEKK307CisKIGNsYXNzIEFu
aW1hdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEFuaW1hdGlvbj4gewogcHVibGljOgogCiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8QW5pbWF0aW9uPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQW5pbWF0aW9uKTsgfTsKICAgICAKICAgICBib29sIGlzRGVsYXlTZXQoKSBjb25zdCB7IHJl
dHVybiBtX2RlbGF5U2V0OyB9CisgICAgYm9vbCBpc0RpcmVjdGlvblNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlyZWN0aW9uU2V0OyB9CiAgICAgYm9vbCBpc0R1cmF0aW9uU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kdXJhdGlvblNldDsgfQotICAgIGJvb2wgaXNUaW1pbmdGdW5jdGlvblNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb25TZXQ7IH0KKyAgICBib29sIGlzSXRlcmF0aW9u
Q291bnRTZXQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdGlvbkNvdW50U2V0OyB9CisgICAgYm9v
bCBpc05hbWVTZXQoKSBjb25zdCB7IHJldHVybiBtX25hbWVTZXQ7IH0KKyAgICBib29sIGlzUGxh
eVN0YXRlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9wbGF5U3RhdGVTZXQ7IH0KICAgICBib29sIGlz
UHJvcGVydHlTZXQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5U2V0OyB9CisgICAgYm9vbCBp
c1RpbWluZ0Z1bmN0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvblNldDsg
fQorCisgICAgLy8gRmxhZ3MgdGhpcyB0byBiZSB0aGUgc3BlY2lhbCAibm9uZSIgYW5pbWF0aW9u
IChhbmltYXRpb24tbmFtZTogbm9uZSkKKyAgICBib29sIGlzTm9uZUFuaW1hdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faXNOb25lOyB9CisgICAgLy8gV2UgY2FuIG1ha2UgcGxhY2Vob2xkZXIgQW5p
bWF0aW9uIG9iamVjdHMgdG8ga2VlcCB0aGUgY29tbWEtc2VwYXJhdGVkIGxpc3RzCisgICAgLy8g
b2YgcHJvcGVydGllcyBpbiBzeW5jLiBpc1ZhbGlkQW5pbWF0aW9uIG1lYW5zIHRoaXMgaXMgbm90
IGEgcGxhY2Vob2xkZXIuCisgICAgYm9vbCBpc1ZhbGlkQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1
cm4gIW1faXNOb25lICYmICFtX25hbWUuaXNFbXB0eSgpOyB9CiAKICAgICBib29sIGlzRW1wdHko
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuICghbV9kdXJhdGlvblNldCAmJiAhbV9kZWxh
eVNldCAmJiAhbV90aW1pbmdGdW5jdGlvblNldCAmJiAhbV9wcm9wZXJ0eVNldCk7CisgICAgICAg
IHJldHVybiAoIW1fZGlyZWN0aW9uU2V0ICYmICFtX2R1cmF0aW9uU2V0ICYmICFtX25hbWVTZXQg
JiYgIW1fcGxheVN0YXRlU2V0ICYmIAorICAgICAgICAgICAgICAgIW1faXRlcmF0aW9uQ291bnRT
ZXQgJiYgIW1fZGVsYXlTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQgJiYgIW1fcHJvcGVydHlT
ZXQpOwogICAgIH0KIAogICAgIGJvb2wgaXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkgY29uc3QKQEAg
LTEyNzgsMjUgKzEyOTUsNDIgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgY2xlYXJEZWxh
eSgpIHsgbV9kZWxheVNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhckRpcmVjdGlvbigpIHsg
bV9kaXJlY3Rpb25TZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJEdXJhdGlvbigpIHsgbV9k
dXJhdGlvblNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclRpbWluZ0Z1bmN0aW9uKCkgeyBt
X3RpbWluZ0Z1bmN0aW9uU2V0ID0gZmFsc2U7IH0KLQorICAgIHZvaWQgY2xlYXJJdGVyYXRpb25D
b3VudCgpIHsgbV9pdGVyYXRpb25Db3VudFNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhck5h
bWUoKSB7IG1fbmFtZVNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhclBsYXlTdGF0ZSgpIHsg
bV9wbGF5U3RhdGVTZXQgPSBBbmltUGxheVN0YXRlUGxheWluZzsgfQogICAgIHZvaWQgY2xlYXJQ
cm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZhbHNlOyB9CisgICAgdm9pZCBjbGVhclRpbWlu
Z0Z1bmN0aW9uKCkgeyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gZmFsc2U7IH0KIAogICAgIGRvdWJs
ZSBkZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXk7IH0KKyAgICBib29sIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CiAgICAgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0aW1p
bmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb247IH0KKyAgICBpbnQg
aXRlcmF0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJhdGlvbkNvdW50OyB9CisgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdW5zaWdu
ZWQgcGxheVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5U3RhdGU7IH0KICAgICBpbnQgcHJv
cGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisgICAgY29uc3QgVGltaW5nRnVu
Y3Rpb24mIHRpbWluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvbjsg
fQorCisgICAgY29uc3QgUmVmUHRyPEtleWZyYW1lTGlzdD4mIGtleWZyYW1lTGlzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5ZnJhbWVMaXN0OyB9CiAKICAgICB2b2lkIHNldERlbGF5KGRvdWJsZSBj
KSB7IG1fZGVsYXkgPSBjOyBtX2RlbGF5U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0RGlyZWN0
aW9uKGJvb2wgZCkgeyBtX2RpcmVjdGlvbiA9IGQ7IG1fZGlyZWN0aW9uU2V0ID0gdHJ1ZTsgfQog
ICAgIHZvaWQgc2V0RHVyYXRpb24oZG91YmxlIGQpIHsgQVNTRVJUKGQgPj0gMCk7IG1fZHVyYXRp
b24gPSBkOyBtX2R1cmF0aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rp
b24oY29uc3QgVGltaW5nRnVuY3Rpb24mIGYpIHsgbV90aW1pbmdGdW5jdGlvbiA9IGY7IG1fdGlt
aW5nRnVuY3Rpb25TZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJdGVyYXRpb25Db3VudChpbnQg
YykgeyBtX2l0ZXJhdGlvbkNvdW50ID0gYzsgbV9pdGVyYXRpb25Db3VudFNldCA9IHRydWU7IH0K
KyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuKSB7IG1fbmFtZSA9IG47IG1fbmFtZVNl
dCA9IHRydWU7IH0KKyAgICB2b2lkIHNldFBsYXlTdGF0ZSh1bnNpZ25lZCBkKSB7IG1fcGxheVN0
YXRlID0gZDsgbV9wbGF5U3RhdGVTZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShp
bnQgdCkgeyBtX3Byb3BlcnR5ID0gdDsgbV9wcm9wZXJ0eVNldCA9IHRydWU7IH0KKyAgICB2b2lk
IHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBmKSB7IG1fdGltaW5nRnVu
Y3Rpb24gPSBmOyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gdHJ1ZTsgfQorCisgICAgdm9pZCBzZXRJ
c05vbmVBbmltYXRpb24oYm9vbCBuKSB7IG1faXNOb25lID0gbjsgfQorCisgICAgdm9pZCBzZXRB
bmltYXRpb25LZXlmcmFtZShjb25zdCBSZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSkgIHsg
bV9rZXlmcmFtZUxpc3QgPSBrZXlmcmFtZTsgfQogCiAgICAgQW5pbWF0aW9uJiBvcGVyYXRvcj0o
Y29uc3QgQW5pbWF0aW9uJiBvKTsKIAogICAgIC8vIHJldHVybiB0cnVlIGlmIGFsbCBtZW1iZXJz
IG9mIHRoaXMgY2xhc3MgbWF0Y2ggKGV4Y2x1ZGluZyBtX25leHQpCi0gICAgYm9vbCBhbmltYXRp
b25zTWF0Y2goY29uc3QgQW5pbWF0aW9uKiB0KSBjb25zdDsKKyAgICBib29sIGFuaW1hdGlvbnNN
YXRjaChjb25zdCBBbmltYXRpb24qIHQsIGJvb2wgbWF0Y2hQbGF5U3RhdGVzPXRydWUpIGNvbnN0
OwogCiAgICAgLy8gcmV0dXJuIHRydWUgZXZlcnkgQW5pbWF0aW9uIGluIHRoZSBjaGFpbiAoZGVm
aW5lZCBieSBtX25leHQpIG1hdGNoIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBbmltYXRp
b24mIG8pIGNvbnN0IHsgcmV0dXJuIGFuaW1hdGlvbnNNYXRjaCgmbyk7IH0KQEAgLTEzMDYsMTUg
KzEzNDAsMjggQEAgcHJpdmF0ZToKICAgICBBbmltYXRpb24oKTsKICAgICBBbmltYXRpb24oY29u
c3QgQW5pbWF0aW9uJiBvKTsKICAgICAKLSAgICBkb3VibGUgbV9kdXJhdGlvbjsKLSAgICBUaW1p
bmdGdW5jdGlvbiBtX3RpbWluZ0Z1bmN0aW9uOwogICAgIGRvdWJsZSBtX2RlbGF5OworICAgIGJv
b2wgbV9kaXJlY3Rpb247CisgICAgZG91YmxlIG1fZHVyYXRpb247CisgICAgaW50IG1faXRlcmF0
aW9uQ291bnQ7CisgICAgU3RyaW5nIG1fbmFtZTsKICAgICBpbnQgbV9wcm9wZXJ0eTsKKyAgICBU
aW1pbmdGdW5jdGlvbiBtX3RpbWluZ0Z1bmN0aW9uOworCisgICAgUmVmUHRyPEtleWZyYW1lTGlz
dD4gbV9rZXlmcmFtZUxpc3Q7CisKKyAgICB1bnNpZ25lZCBtX3BsYXlTdGF0ZSAgICAgOiAyOwog
Ci0gICAgYm9vbCBtX2R1cmF0aW9uU2V0ICAgICAgIDogMTsKLSAgICBib29sIG1fdGltaW5nRnVu
Y3Rpb25TZXQgOiAxOwogICAgIGJvb2wgbV9kZWxheVNldCAgICAgICAgICA6IDE7CisgICAgYm9v
bCBtX2RpcmVjdGlvblNldCAgICAgIDogMTsKKyAgICBib29sIG1fZHVyYXRpb25TZXQgICAgICAg
OiAxOworICAgIGJvb2wgbV9pdGVyYXRpb25Db3VudFNldCA6IDE7CisgICAgYm9vbCBtX25hbWVT
ZXQgICAgICAgICAgIDogMTsKKyAgICBib29sIG1fcGxheVN0YXRlU2V0ICAgICAgOiAxOwogICAg
IGJvb2wgbV9wcm9wZXJ0eVNldCAgICAgICA6IDE7CisgICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9u
U2V0IDogMTsKKyAgICAKKyAgICBib29sIG1faXNOb25lICAgICAgICAgICAgOiAxOwogfTsKIAog
Y2xhc3MgQW5pbWF0aW9uTGlzdCA6IHB1YmxpYyBWZWN0b3I8UmVmUHRyPEFuaW1hdGlvbj4gPgpA
QCAtMTM3Niw3ICsxNDIzLDkgQEAgcHVibGljOgogIAogICAgIGJvb2wgc2hhZG93RGF0YUVxdWl2
YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3Q7CiAgICAgYm9v
bCByZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0
YSYgbykgY29uc3Q7CisgICAgYm9vbCBhbmltYXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHls
ZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7CiAgICAgYm9vbCB0cmFuc2l0aW9uRGF0YUVx
dWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YSYpIGNvbnN0OworICAgIHZv
aWQgdXBkYXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3Ip
OwogCiAgICAgaW50IGxpbmVDbGFtcDsgLy8gQW4gQXBwbGUgZXh0ZW5zaW9uLgogI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKQEAgLTE0MDMsNiArMTQ1Miw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBtX2JveFJlZmxlY3Q7CiAKKyAgICBBbmltYXRp
b25MaXN0KiBtX2FuaW1hdGlvbnM7CiAgICAgQW5pbWF0aW9uTGlzdCogbV90cmFuc2l0aW9uczsK
IAogICAgIEZpbGxMYXllciBtX21hc2s7CkBAIC0yMTAxLDEwICsyMTUxLDE4IEBAIHB1YmxpYzoK
ICAgICAvLyBFbmQgQ1NTMyBHZXR0ZXJzCiAKICAgICAvLyBBcHBsZS1zcGVjaWZpYyBwcm9wZXJ0
eSBnZXR0ZXIgbWV0aG9kcwotICAgIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc1RyYW5zaXRpb25zKCk7
CisgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX2FuaW1hdGlvbnM7IH0KICAgICBjb25zdCBBbmltYXRpb25M
aXN0KiB0cmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5t
X3RyYW5zaXRpb25zOyB9CisKKyAgICBBbmltYXRpb25MaXN0KiBhY2Nlc3NBbmltYXRpb25zKCk7
CisgICAgQW5pbWF0aW9uTGlzdCogYWNjZXNzVHJhbnNpdGlvbnMoKTsKKworICAgIGJvb2wgaGFz
QW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FuaW1h
dGlvbnMgJiYgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYW5pbWF0aW9ucy0+c2l6ZSgpID4gMDsg
fQogICAgIGJvb2wgaGFzVHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV90cmFuc2l0aW9ucyAmJiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0
aW9ucy0+c2l6ZSgpID4gMDsgfQogCisgICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBmb3VuZCBBbmlt
YXRpb24gKGluY2x1ZGluZyAnYWxsJyB0cmFuc2l0aW9ucykKKyAgICBjb25zdCBBbmltYXRpb24q
IHRyYW5zaXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpOworCiAgICAgaW50IGxpbmVDbGFt
cCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5saW5lQ2xhbXA7IH0KICAg
ICBib29sIHRleHRTaXplQWRqdXN0KCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEt
PnRleHRTaXplQWRqdXN0OyB9CiAgICAgRVRleHRTZWN1cml0eSB0ZXh0U2VjdXJpdHkoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxFVGV4dFNlY3VyaXR5PihyYXJlSW5oZXJpdGVkRGF0YS0+
dGV4dFNlY3VyaXR5KTsgfQpAQCAtMjM2OCw2ICsyNDI2LDEzIEBAIHB1YmxpYzoKICAgICAvLyBF
bmQgQ1NTMyBTZXR0ZXJzCiAKICAgICAvLyBBcHBsZS1zcGVjaWZpYyBwcm9wZXJ0eSBzZXR0ZXJz
CisgICAgdm9pZCBjbGVhckFuaW1hdGlvbnMoKQorICAgIHsKKyAgICAgICAgaWYgKHJhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIGRlbGV0
ZSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9hbmltYXRpb25zOworICAgICAgICAg
ICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9ucyA9IDA7CisgICAg
ICAgIH0KKyAgICB9CiAgICAgdm9pZCBjbGVhclRyYW5zaXRpb25zKCkKICAgICB7CiAgICAgICAg
IGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9ucykgewpAQCAt
MjM3Niw4ICsyNDQxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQg
aW5oZXJpdEFuaW1hdGlvbnMoY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50KSB7IGNsZWFyQW5p
bWF0aW9ucygpOyBpZiAocGFyZW50KSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9h
bmltYXRpb25zID0gbmV3IEFuaW1hdGlvbkxpc3QoKnBhcmVudCk7IH0KICAgICB2b2lkIGluaGVy
aXRUcmFuc2l0aW9ucyhjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnQpIHsgY2xlYXJUcmFuc2l0
aW9ucygpOyBpZiAocGFyZW50KSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFu
c2l0aW9ucyA9IG5ldyBBbmltYXRpb25MaXN0KCpwYXJlbnQpOyB9CisgICAgdm9pZCBhZGp1c3RB
bmltYXRpb25zKCk7CiAgICAgdm9pZCBhZGp1c3RUcmFuc2l0aW9ucygpOworICAgIHZvaWQgdXBk
YXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpIHsgaWYg
KHJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpKSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS0+dXBkYXRlS2V5ZnJhbWVzKHN0eWxlU2VsZWN0b3IpOyB9CisKICAgICB2b2lkIHNldExpbmVD
bGFtcChpbnQgYykgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLCBsaW5lQ2xhbXAsIGMp
OyB9CiAgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgU0VUX1ZBUihyYXJlSW5o
ZXJpdGVkRGF0YSwgdGV4dFNpemVBZGp1c3QsIGIpOyB9CiAgICAgdm9pZCBzZXRUZXh0U2VjdXJp
dHkoRVRleHRTZWN1cml0eSBhVGV4dFNlY3VyaXR5KSB7IFNFVF9WQVIocmFyZUluaGVyaXRlZERh
dGEsIHRleHRTZWN1cml0eSwgYVRleHRTZWN1cml0eSk7IH0gCkBAIC0yNTM0LDEwICsyNjAzLDE0
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxUcmFuc2Zvcm1PcmlnaW5ZKCkg
eyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBlcmNlbnQpOyB9CiAgICAgCiAgICAgLy8gS2VlcCB0aGVz
ZSBhdCB0aGUgZW5kLgotICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsRGVsYXkoKSB7IHJldHVybiAw
OyB9Ci0gICAgc3RhdGljIGRvdWJsZSBpbml0aWFsRHVyYXRpb24oKSB7IHJldHVybiAwOyB9Ci0g
ICAgc3RhdGljIFRpbWluZ0Z1bmN0aW9uIGluaXRpYWxUaW1pbmdGdW5jdGlvbigpIHsgcmV0dXJu
IFRpbWluZ0Z1bmN0aW9uKCk7IH0KLSAgICBzdGF0aWMgaW50IGluaXRpYWxQcm9wZXJ0eSgpIHsg
cmV0dXJuIGNBbmltYXRlQWxsOyB9CisgICAgc3RhdGljIGZsb2F0IGluaXRpYWxBbmltYXRpb25E
ZWxheSgpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsQW5pbWF0aW9uRGly
ZWN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBzdGF0aWMgZG91YmxlIGluaXRpYWxBbmlt
YXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgaW50IGluaXRpYWxBbmlt
YXRpb25JdGVyYXRpb25Db3VudCgpIHsgcmV0dXJuIDE7IH0KKyAgICBzdGF0aWMgU3RyaW5nIGlu
aXRpYWxBbmltYXRpb25OYW1lKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICBzdGF0aWMgdW5z
aWduZWQgaW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSgpIHsgcmV0dXJuIEFuaW1QbGF5U3RhdGVQ
bGF5aW5nOyB9CisgICAgc3RhdGljIGludCBpbml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSB7IHJl
dHVybiBjQW5pbWF0ZUFsbDsgfQorICAgIHN0YXRpYyBUaW1pbmdGdW5jdGlvbiBpbml0aWFsQW5p
bWF0aW9uVGltaW5nRnVuY3Rpb24oKSB7IHJldHVybiBUaW1pbmdGdW5jdGlvbigpOyB9CiAgICAg
c3RhdGljIGludCBpbml0aWFsTGluZUNsYW1wKCkgeyByZXR1cm4gLTE7IH0KICAgICBzdGF0aWMg
Ym9vbCBpbml0aWFsVGV4dFNpemVBZGp1c3QoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGlj
IEVUZXh0U2VjdXJpdHkgaW5pdGlhbFRleHRTZWN1cml0eSgpIHsgcmV0dXJuIFRTTk9ORTsgfQpA
QCAtMjU0Nyw2ICsyNjIwLDUwIEBAIHB1YmxpYzoKICNlbmRpZgogfTsKIAorI3ByYWdtYSBtYXJr
IC0KKworY2xhc3MgS2V5ZnJhbWVWYWx1ZSB7CitwdWJsaWM6CisgICAgS2V5ZnJhbWVWYWx1ZSgp
IDoga2V5KC0xKSB7IH0KKyAgICBmbG9hdCBrZXk7CisgICAgUmVuZGVyU3R5bGUgc3R5bGU7Cit9
OworCitjbGFzcyBLZXlmcmFtZUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxLZXlmcmFtZUxpc3Q+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxLZXlmcmFtZUxpc3Q+IGNyZWF0ZShj
b25zdCBBdG9taWNTdHJpbmcmIGluQW5pbU5hbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlm
cmFtZUxpc3QoaW5BbmltTmFtZSkpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5
ZnJhbWVMaXN0JiBvKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2V5ZnJhbWVM
aXN0JiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CisgICAgCisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbmltYXRpb25OYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25O
YW1lOyB9CisgICAgCisgICAgdm9pZCBpbnNlcnQoZmxvYXQgaW5LZXksIGNvbnN0IFJlbmRlclN0
eWxlJiBpblN0eWxlKTsKKyAgICAKKyAgICB2b2lkIGFkZFByb3BlcnR5KGludCBwcm9wKSB7IG1f
cHJvcGVydGllcy5hZGQocHJvcCk7IH0KKyAgICBib29sIGNvbnRhaW5zUHJvcGVydHkoaW50IHBy
b3ApIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5jb250YWlucyhwcm9wKTsgfQorICAgIEhh
c2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Qcm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9w
cm9wZXJ0aWVzLmJlZ2luKCk7IH0KKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVu
ZFByb3BlcnRpZXMoKSB7IHJldHVybiBtX3Byb3BlcnRpZXMuZW5kKCk7IH0KKyAgICAKKyAgICB2
b2lkIGNsZWFyKCkgeyBtX2tleWZyYW1lcy5jbGVhcigpOyBtX3Byb3BlcnRpZXMuY2xlYXIoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmlzRW1wdHko
KTsgfQorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5LZXlm
cmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5iZWdpbigpOyB9CisgICAgVmVjdG9y
PEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmRLZXlmcmFtZXMoKSBjb25zdCB7IHJl
dHVybiBtX2tleWZyYW1lcy5lbmQoKTsgfQorCitwcml2YXRlOgorICAgIEtleWZyYW1lTGlzdChj
b25zdCBBdG9taWNTdHJpbmcmIGluQW5pbU5hbWUpCisgICAgOiBtX2FuaW1hdGlvbk5hbWUoaW5B
bmltTmFtZSkKKyAgICB7CisgICAgICAgIGluc2VydCgwLCBSZW5kZXJTdHlsZSgpKTsKKyAgICAg
ICAgaW5zZXJ0KDEsIFJlbmRlclN0eWxlKCkpOworICAgIH0KKyAgICAgICAgCitwcm90ZWN0ZWQ6
CisgICAgQXRvbWljU3RyaW5nIG1fYW5pbWF0aW9uTmFtZTsKKyAgICBWZWN0b3I8S2V5ZnJhbWVW
YWx1ZT4gbV9rZXlmcmFtZXM7CisgICAgSGFzaFNldDxpbnQ+IG1fcHJvcGVydGllczsgICAgICAg
Ly8gdGhlIHByb3BlcnRpZXMgYmVpbmcgYW5pbWF0ZWQKK307CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmCg==
</data>
<flag name="review"
          id="9972"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>