<?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>15571</bug_id>
          
          <creation_ts>2007-10-20 01:53:39 -0700</creation_ts>
          <short_desc>SVG text needs to support textLength/lengthAdjust properties &amp; &apos;kerning&apos;</short_desc>
          <delta_ts>2008-09-25 08:47:14 -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>SVG</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>58890</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-10-20 01:53:39 -0700</bug_when>
    <thetext>Advanced SVG text support defines a way to expand/contract text (normal text as well as textPath) based on the textLength property. lengthAdjust=&quot;spacing&quot; and ie. textLength=&quot;200&quot; forces the text to be exactly 200px wide, while this is achieved through the letter-spacing modification. For lengthAdjust=&quot;spacingAndGlyphs&quot; the whole set of glyphs is expanded/contracted.

This requires that our SVG text implementation handles letter &amp; word spacing, as well as &apos;kerning&apos; before - so our absolute positioned SVG glyphs take the spacing into account at layout time, instead of paint time (basically SVG needs to disable spacing functionality of platform/Font.cpp) to be able to properly take into account spacing when implementing lengthAdjust.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58895</commentid>
    <comment_count>1</comment_count>
      <attachid>16741</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-10-20 02:05:47 -0700</bug_when>
    <thetext>Created attachment 16741
Initial patch

Support all textLength/lengthAdjust combinations on normal text &amp; textPaths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58901</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-10-20 03:48:20 -0700</bug_when>
    <thetext>Landed in r26819.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16741</attachid>
            <date>2007-10-20 02:05:47 -0700</date>
            <delta_ts>2007-10-20 03:29:46 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>FixSVGTextLength.diff</filename>
            <type>text/plain</type>
            <size>31997</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI2ODE0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDctMTAtMjAgIE5pa29sYXMgWmltbWVybWFu
biAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGVkIHRlc3RzIHRoYXQgbmVlZCB0ZXh0TGVuZ3RoL2xlbmd0
aEFkanVzdC9rZXJuaW5nIHN1cHBvcnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL1cz
Qy1TVkctMS4xL3RleHQtc3BhY2luZy0wMS1iLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcv
YmF0aWsvdGV4dC90ZXh0TGF5b3V0LWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHN2Zy9i
YXRpay90ZXh0L3RleHRMYXlvdXQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHN2Zy9iYXRpay90
ZXh0L3RleHRMYXlvdXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9iYXRpay90ZXh0L3Rl
eHRPblBhdGhTcGFjZXMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogc3ZnL2JhdGlrL3Rl
eHQvdGV4dE9uUGF0aFNwYWNlcy1leHBlY3RlZC5wbmc6CisgICAgICAgICogc3ZnL2JhdGlrL3Rl
eHQvdGV4dE9uUGF0aFNwYWNlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3ZnL2JhdGlrL3Rl
eHQvdGV4dFBvc2l0aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcvYmF0aWsvdGV4dC90
ZXh0UG9zaXRpb24yLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdmcvY3VzdG9tL3RleHQtbGV0
dGVyLXNwYWNpbmctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy90ZXh0L3RleHQtc3BhY2lu
Zy0wMS1iLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHN2Zy90ZXh0L3RleHQtc3BhY2lu
Zy0wMS1iLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBzdmcvdGV4dC90ZXh0LXNwYWNpbmctMDEt
Yi1leHBlY3RlZC50eHQ6CisKIDIwMDctMTAtMTkgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBSUz1NYXJrLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UZXh0U3R5
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1RleHRTdHlsZS5oCShyZXZpc2lv
biAyNjgxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4dFN0eWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICAgICAgICAgLCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUoZGlyZWN0
aW9uYWxPdmVycmlkZSkKICAgICAgICAgLCBtX2FwcGx5UnVuUm91bmRpbmcoYXBwbHlSdW5Sb3Vu
ZGluZykKICAgICAgICAgLCBtX2FwcGx5V29yZFJvdW5kaW5nKGFwcGx5V29yZFJvdW5kaW5nKQor
ICAgICAgICAsIG1fZGlzYWJsZVNwYWNpbmcoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtNDUs
NyArNDYsOSBAQAogICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlyZWN0aW9uYWxPdmVycmlkZTsgfQogICAgIGJvb2wgYXBwbHlSdW5Sb3VuZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fYXBwbHlSdW5Sb3VuZGluZzsgfQogICAgIGJvb2wgYXBwbHlXb3JkUm91
bmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5V29yZFJvdW5kaW5nOyB9CisgICAgYm9vbCBz
cGFjaW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rpc2FibGVTcGFjaW5nOyB9CiAKKyAg
ICB2b2lkIGRpc2FibGVTcGFjaW5nKCkgeyBtX2Rpc2FibGVTcGFjaW5nID0gdHJ1ZTsgfQogICAg
IHZvaWQgZGlzYWJsZVJvdW5kaW5nSGFja3MoKSB7IG1fYXBwbHlSdW5Sb3VuZGluZyA9IG1fYXBw
bHlXb3JkUm91bmRpbmcgPSBmYWxzZTsgfQogICAgIHZvaWQgc2V0UlRMKGJvb2wgYikgeyBtX3J0
bCA9IGI7IH0KICAgICB2b2lkIHNldERpcmVjdGlvbmFsT3ZlcnJpZGUoYm9vbCBvdmVycmlkZSkg
eyBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUgPSBvdmVycmlkZTsgfQpAQCAtNTgsNiArNjEsNyBAQAog
ICAgIGJvb2wgbV9kaXJlY3Rpb25hbE92ZXJyaWRlOwogICAgIGJvb2wgbV9hcHBseVJ1blJvdW5k
aW5nOwogICAgIGJvb2wgbV9hcHBseVdvcmRSb3VuZGluZzsKKyAgICBib29sIG1fZGlzYWJsZVNw
YWNpbmc7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5jcHAJKHJldmlzaW9uIDI2ODEzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBA
CiAgICAgICAgICAgICAgICAgd2lkdGggPSBmb250RGF0YS0+bV9hZGp1c3RlZFNwYWNlV2lkdGg7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7CisgICAgICAgIGlm
IChoYXNFeHRyYVNwYWNpbmcgJiYgIW1fc3R5bGUuc3BhY2luZ0Rpc2FibGVkKCkpIHsKICAgICAg
ICAgICAgIC8vIEFjY291bnQgZm9yIGxldHRlci1zcGFjaW5nLgogICAgICAgICAgICAgaWYgKHdp
ZHRoICYmIG1fZm9udC0+bGV0dGVyU3BhY2luZygpKQogICAgICAgICAgICAgICAgIHdpZHRoICs9
IG1fZm9udC0+bGV0dGVyU3BhY2luZygpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9v
dElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElu
bGluZUJveC5jcHAJKHJldmlzaW9uIDI2ODEzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9v
dElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAKICAgICBpbmZv
LmFzc2lnbkNodW5rUHJvcGVydGllcyA9IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBj
bG9zZVRleHRDaHVuayhTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvJiBpbmZvLCBWZWN0b3I8U1ZHVGV4
dENodW5rPiYgdGV4dENodW5rcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbG9zZVRleHRDaHVuayhT
VkdUZXh0Q2h1bmtMYXlvdXRJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghaW5mby5jaHVuay5i
b3hlcy5sYXN0KCkuaXNPcGVuKCkpOwogICAgIEFTU0VSVChpbmZvLmNodW5rLmJveGVzLmxhc3Qo
KS5pc0Nsb3NlZCgpKTsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICBpbmZvLmNodW5rLmVuZCA9IGlu
Zm8uaXQ7CiAgICAgQVNTRVJUKGluZm8uY2h1bmsuZW5kID49IGluZm8uY2h1bmsuc3RhcnQpOwog
Ci0gICAgdGV4dENodW5rcy5hcHBlbmQoaW5mby5jaHVuayk7CisgICAgaW5mby5zdmdUZXh0Q2h1
bmtzLmFwcGVuZChpbmZvLmNodW5rKTsKIH0KIAogUmVuZGVyU1ZHUm9vdCogZmluZFNWR1Jvb3RP
YmplY3QoUmVuZGVyT2JqZWN0KiBzdGFydCkKQEAgLTEwOCw2ICsxMDgsMjMgQEAKICAgICByZXR1
cm4gRmxvYXRQb2ludChsb3dYLCBsb3dZKTsKIH0KIAorLy8gSGVscGVyIGZ1bmN0aW9uCitzdGF0
aWMgZmxvYXQgY2FsY3VsYXRlS2VybmluZyhSZW5kZXJPYmplY3QqIGl0ZW0pCit7CisgICAgY29u
c3QgRm9udCYgZm9udCA9IGl0ZW0tPnN0eWxlKCktPmZvbnQoKTsKKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogc3ZnU3R5bGUgPSBpdGVtLT5zdHlsZSgpLT5zdmdTdHlsZSgpOworCisgICAgZmxv
YXQga2VybmluZyA9IDAuMGY7CisgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHN2Z1N0eWxlLT5rZXJuaW5nKCkpKSB7
CisgICAgICAgIGtlcm5pbmcgPSBwcmltaXRpdmUtPmdldEZsb2F0VmFsdWUoKTsKKworICAgICAg
ICBpZiAocHJpbWl0aXZlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFICYmIGZvbnQucGl4ZWxTaXplKCkgPiAwKQorICAgICAgICAgICAga2Vybmlu
ZyA9IGtlcm5pbmcgLyAxMDAuMGYgKiBmb250LnBpeGVsU2l6ZSgpOworICAgIH0KKworICAgIHJl
dHVybiBrZXJuaW5nOworfQorCiAvLyBIZWxwZXIgY2xhc3MgZm9yIHBhaW50KCkKIHN0cnVjdCBT
VkdSb290SW5saW5lQm94UGFpbnRXYWxrZXIgewogICAgIFNWR1Jvb3RJbmxpbmVCb3hQYWludFdh
bGtlcihTVkdSb290SW5saW5lQm94KiByb290Qm94LCBTVkdSZXNvdXJjZUZpbHRlciogcm9vdEZp
bHRlciwgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkK
QEAgLTM3MCw3ICszODcsNyBAQAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9
CiAKLWludCBTVkdSb290SW5saW5lQm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGx5KGludCB4LCBp
bnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJiBuZWVkc1dvcmRTcGFj
aW5nKQoraW50IFNWR1Jvb3RJbmxpbmVCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbHkoaW50LCBp
bnQmIGxlZnRQb3NpdGlvbiwgaW50JiByaWdodFBvc2l0aW9uLCBib29sJikKIHsKICAgICAvLyBS
ZW1vdmUgYW55IG9mZnNldHMgY2F1c2VkIGJ5IFJUTCB0ZXh0IGxheW91dAogICAgIGxlZnRQb3Np
dGlvbiA9IDA7CkBAIC00MTYsNyArNDMzLDExIEBACiAgICAgQVNTRVJUKHRleHRCb3gpOwogICAg
IEFTU0VSVChzdHlsZSk7CiAKLSAgICByZXR1cm4gVGV4dFN0eWxlKGZhbHNlLCBzdGF0aWNfY2Fz
dDxpbnQ+KHhQb3MpLCB0ZXh0Qm94LT50b0FkZCgpLCB0ZXh0Qm94LT5tX3JldmVyc2VkLCB0ZXh0
Qm94LT5tX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CisgICAgVGV4
dFN0eWxlIHRleHRTdHlsZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50Pih4UG9zKSwgdGV4dEJveC0+
dG9BZGQoKSwgdGV4dEJveC0+bV9yZXZlcnNlZCwgdGV4dEJveC0+bV9kaXJPdmVycmlkZSB8fCBz
dHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOworCisgICAgLy8gV2UgaGFuZGxlIGxldHRlciAmIHdv
cmQgc3BhY2luZyBvdXJzZWx2ZXMKKyAgICB0ZXh0U3R5bGUuZGlzYWJsZVNwYWNpbmcoKTsKKyAg
ICByZXR1cm4gdGV4dFN0eWxlOwogfQogCiBzdGF0aWMgZmxvYXQgY3VtbXVsYXRlZFdpZHRoT3JI
ZWlnaHRPZlRleHRDaHVuayhTVkdUZXh0Q2h1bmsmIGNodW5rLCBib29sIGNhbGNXaWR0aE9ubHkp
CkBAIC00OTksMTEgKzUyMCw4IEBACiAgICAgcmV0dXJuIGN1bW11bGF0ZWRXaWR0aE9ySGVpZ2h0
T2ZUZXh0Q2h1bmsoY2h1bmssIGZhbHNlKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwbHlUZXh0QW5j
aG9yVG9UZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaykKK3N0YXRpYyBmbG9hdCBjYWxjdWxh
dGVUZXh0QW5jaG9yU2hpZnRGb3JUZXh0Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaywgRVRleHRB
bmNob3IgYW5jaG9yKQogewotICAgIGlmIChjaHVuay5hbmNob3IgPT0gVEFfU1RBUlQpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIGZsb2F0IHNoaWZ0ID0gMC4wZjsKIAogICAgIGlmIChjaHVuay5p
c1ZlcnRpY2FsVGV4dCkKQEAgLTUxMSwxMSArNTI5LDIxIEBACiAgICAgZWxzZQogICAgICAgICBz
aGlmdCA9IGN1bW11bGF0ZWRXaWR0aE9mVGV4dENodW5rKGNodW5rKTsKIAotICAgIGlmIChjaHVu
ay5hbmNob3IgPT0gVEFfTUlERExFKQorICAgIGlmIChhbmNob3IgPT0gVEFfTUlERExFKQogICAg
ICAgICBzaGlmdCAqPSAtMC41ZjsKICAgICBlbHNlCiAgICAgICAgIHNoaWZ0ICo9IC0xLjBmOwog
CisgICAgcmV0dXJuIHNoaWZ0OworfQorCitzdGF0aWMgdm9pZCBhcHBseVRleHRBbmNob3JUb1Rl
eHRDaHVuayhTVkdUZXh0Q2h1bmsmIGNodW5rKQoreworICAgIGlmIChjaHVuay5hbmNob3IgPT0g
VEFfU1RBUlQpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHNoaWZ0ID0gY2FsY3VsYXRl
VGV4dEFuY2hvclNoaWZ0Rm9yVGV4dENodW5rKGNodW5rLCBjaHVuay5hbmNob3IpOworCiAgICAg
Ly8gQXBwbHkgY29ycmVjdGlvbiB0byBjaHVuawogICAgIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0
b3IgY2h1bmtJdCA9IGNodW5rLnN0YXJ0OwogICAgIGZvciAoOyBjaHVua0l0ICE9IGNodW5rLmVu
ZDsgKytjaHVua0l0KSB7CkBAIC01NDYsMzkgKzU3NCw1NSBAQAogICAgIH0KIH0KIAotc3RhdGlj
IHZvaWQgYXBwbHlUZXh0TGVuZ3RoQ29ycmVjdGlvblRvVGV4dENodW5rKFNWR1RleHRDaHVuayYg
Y2h1bmspCitzdGF0aWMgZmxvYXQgY2FsY3VsYXRlVGV4dExlbmd0aENvcnJlY3Rpb25Gb3JUZXh0
Q2h1bmsoU1ZHVGV4dENodW5rJiBjaHVuaywgRUxlbmd0aEFkanVzdCBsZW5ndGhBZGp1c3QsIGZs
b2F0JiBjb21wdXRlZExlbmd0aCkKIHsKLSAgICBpZiAoY2h1bmsudGV4dExlbmd0aCA8PSBGTFRf
RVBTSUxPTikgLy8gTm90IHN1cmUsIHdoeSA8PSAwLjAgZG9lc24ndCB3b3JrIGhlcmUgKHNvbWUg
Zmx0cG9pbnQgaXNzdWUpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoY2h1bmsudGV4dExlbmd0
aCA8PSAwLjBmKQorICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIGZsb2F0IGNvbXB1dGVkV2lk
dGggPSBjdW1tdWxhdGVkV2lkdGhPZlRleHRDaHVuayhjaHVuayk7CiAgICAgZmxvYXQgY29tcHV0
ZWRIZWlnaHQgPSBjdW1tdWxhdGVkSGVpZ2h0T2ZUZXh0Q2h1bmsoY2h1bmspOwogCi0gICAgaWYg
KChjb21wdXRlZFdpZHRoIDw9IDAuMCAmJiAhY2h1bmsuaXNWZXJ0aWNhbFRleHQpIHx8Ci0gICAg
ICAgIChjb21wdXRlZEhlaWdodCA8PSAwLjAgJiYgY2h1bmsuaXNWZXJ0aWNhbFRleHQpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKChjb21wdXRlZFdpZHRoIDw9IDAuMGYgJiYgIWNodW5rLmlz
VmVydGljYWxUZXh0KSB8fAorICAgICAgICAoY29tcHV0ZWRIZWlnaHQgPD0gMC4wZiAmJiBjaHVu
ay5pc1ZlcnRpY2FsVGV4dCkpCisgICAgICAgIHJldHVybiAwLjBmOwogCi0gICAgZmxvYXQgY29t
cHV0ZWRMZW5ndGg7Ci0KICAgICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQpCiAgICAgICAgIGNv
bXB1dGVkTGVuZ3RoID0gY29tcHV0ZWRIZWlnaHQ7CiAgICAgZWxzZQogICAgICAgICBjb21wdXRl
ZExlbmd0aCA9IGNvbXB1dGVkV2lkdGg7CiAKLSAgICBpZiAoY2h1bmsubGVuZ3RoQWRqdXN0ID09
IFNWR1RleHRDb250ZW50RWxlbWVudDo6TEVOR1RIQURKVVNUX1NQQUNJTkdBTkRHTFlQSFMpIHsK
LSAgICAgICAgU1ZHQ2hhciYgZmlyc3RDaGFyID0gKihjaHVuay5zdGFydCk7Ci0gICAgICAgIGNo
dW5rLmN0bS50cmFuc2xhdGUoZmlyc3RDaGFyLngsIGZpcnN0Q2hhci55KTsKLQorICAgIGlmIChs
ZW5ndGhBZGp1c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1RfU1BBQ0lO
R0FOREdMWVBIUykgewogICAgICAgICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQpCi0gICAgICAg
ICAgICBjaHVuay5jdG0uc2NhbGUoMS4wLCBjaHVuay50ZXh0TGVuZ3RoIC8gY29tcHV0ZWRMZW5n
dGgpOworICAgICAgICAgICAgY2h1bmsuY3RtLnNjYWxlKDEuMGYsIGNodW5rLnRleHRMZW5ndGgg
LyBjb21wdXRlZExlbmd0aCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNodW5rLmN0bS5z
Y2FsZShjaHVuay50ZXh0TGVuZ3RoIC8gY29tcHV0ZWRMZW5ndGgsIDEuMCk7CisgICAgICAgICAg
ICBjaHVuay5jdG0uc2NhbGUoY2h1bmsudGV4dExlbmd0aCAvIGNvbXB1dGVkTGVuZ3RoLCAxLjBm
KTsKIAotICAgICAgICBjaHVuay5jdG0udHJhbnNsYXRlKC1maXJzdENoYXIueCwgLWZpcnN0Q2hh
ci55KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBzcGFjaW5nVG9BcHBseSA9IChjaHVu
ay50ZXh0TGVuZ3RoIC0gY29tcHV0ZWRMZW5ndGgpIC8gZmxvYXQoY2h1bmsuZW5kIC0gY2h1bmsu
c3RhcnQpOworICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CiAKLSAgICAgICAgLy8gQXBwbHkg
Y29ycmVjdGlvbiB0byBjaHVuayAKKyAgICByZXR1cm4gKGNodW5rLnRleHRMZW5ndGggLSBjb21w
dXRlZExlbmd0aCkgLyBmbG9hdChjaHVuay5lbmQgLSBjaHVuay5zdGFydCk7Cit9CisKK3N0YXRp
YyB2b2lkIGFwcGx5VGV4dExlbmd0aENvcnJlY3Rpb25Ub1RleHRDaHVuayhTVkdUZXh0Q2h1bmsm
IGNodW5rKQoreworICAgIC8vIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgaXMgaGFu
ZGxlZCBieSBtb2RpZnlpbmcgY2h1bmsuY3RtCisgICAgZmxvYXQgY29tcHV0ZWRMZW5ndGggPSAw
LjBmOworICAgIGZsb2F0IHNwYWNpbmdUb0FwcGx5ID0gY2FsY3VsYXRlVGV4dExlbmd0aENvcnJl
Y3Rpb25Gb3JUZXh0Q2h1bmsoY2h1bmssIGNodW5rLmxlbmd0aEFkanVzdCwgY29tcHV0ZWRMZW5n
dGgpOworCisgICAgaWYgKCFjaHVuay5jdG0uaXNJZGVudGl0eSgpICYmIGNodW5rLmxlbmd0aEFk
anVzdCA9PSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OkxFTkdUSEFESlVTVF9TUEFDSU5HQU5ER0xZ
UEhTKSB7CisgICAgICAgIFNWR0NoYXImIGZpcnN0Q2hhciA9ICooY2h1bmsuc3RhcnQpOworCisg
ICAgICAgIC8vIEFzc3VyZSB3ZSBhcHBseSB0aGUgY2h1bmsgc2NhbGluZyBpbiB0aGUgcmlnaHQg
b3JpZ2luCisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBuZXdDaHVua0N0bTsKKyAgICAgICAgbmV3
Q2h1bmtDdG0udHJhbnNsYXRlKGZpcnN0Q2hhci54LCBmaXJzdENoYXIueSk7CisgICAgICAgIG5l
d0NodW5rQ3RtID0gY2h1bmsuY3RtICogbmV3Q2h1bmtDdG07CisgICAgICAgIG5ld0NodW5rQ3Rt
LnRyYW5zbGF0ZSgtZmlyc3RDaGFyLngsIC1maXJzdENoYXIueSk7CisKKyAgICAgICAgY2h1bmsu
Y3RtID0gbmV3Q2h1bmtDdG07CisgICAgfQorCisgICAgLy8gQXBwbHkgY29ycmVjdGlvbiB0byBj
aHVuayAKKyAgICBpZiAoc3BhY2luZ1RvQXBwbHkgIT0gMC4wZikgewogICAgICAgICBWZWN0b3I8
U1ZHQ2hhcj46Oml0ZXJhdG9yIGNodW5rSXQgPSBjaHVuay5zdGFydDsKICAgICAgICAgZm9yICg7
IGNodW5rSXQgIT0gY2h1bmsuZW5kOyArK2NodW5rSXQpIHsKICAgICAgICAgICAgIFNWR0NoYXIm
IGN1ckNoYXIgPSAqY2h1bmtJdDsKQEAgLTU5OSwxMyArNjQzLDEzIEBACiAgICAgbV9zdmdUZXh0
Q2h1bmtzLmNsZWFyKCk7CiAKICAgICAvLyBCdWlsZCBsYXlvdXQgaW5mb3JtYXRpb24gZm9yIGFs
bCBjb250YWluZWQgcmVuZGVyIG9iamVjdHMKLSAgICBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvIGlu
Zm87CisgICAgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyBpbmZvKG1fc3ZnQ2hhcnMpOwogICAgIGJ1
aWxkTGF5b3V0SW5mb3JtYXRpb24odGhpcywgaW5mbyk7CiAKICAgICAvLyBOb3cgYWxsIGxheW91
dCBpbmZvcm1hdGlvbiBhcmUgYXZhaWxhYmxlIGZvciBldmVyeSBjaGFyYWN0ZXIKICAgICAvLyBj
b250YWluZWQgaW4gYW55IG9mIG91ciBjaGlsZCBpbmxpbmUvZmxvdyBib3hlcy4gQnVpbGQgbGlz
dAogICAgIC8vIG9mIHRleHQgY2h1bmtzIG5vdywgdG8gYmUgYWJsZSB0byBhcHBseSB0ZXh0LWFu
Y2hvciBzaGlmdHMuCi0gICAgYnVpbGRUZXh0Q2h1bmtzKCk7CisgICAgYnVpbGRUZXh0Q2h1bmtz
KG1fc3ZnQ2hhcnMsIG1fc3ZnVGV4dENodW5rcywgdGhpcyk7CiAKICAgICAvLyBMYXlvdXQgYWxs
IHRleHQgY2h1bmtzCiAgICAgLy8gdGV4dC1hbmNob3IgbmVlZHMgdG8gYmUgYXBwbGllZCB0byBp
bmRpdmlkdWFsIGNodW5rcy4KQEAgLTYyMSw0MCArNjY1LDYgQEAKICAgICBsYXlvdXRJbmxpbmVC
b3hlcygpOwogfQogCi1zdGF0aWMgdm9pZCB0b3RhbEFkdmFuY2VPZklubGluZVRleHRCb3goSW5s
aW5lVGV4dEJveCogdGV4dEJveCwgaW50IGZyb20sIGludCB0bywgYm9vbCBpc1ZlcnRpY2FsVGV4
dCwgZmxvYXQmIHRvdGFsQWR2YW5jZSkKLXsKLSAgICBBU1NFUlQodGV4dEJveCk7Ci0gICAgQVNT
RVJUKHRleHRCb3gtPm9iamVjdCgpKTsKLQotICAgIGlmICh0byA+IDAgJiYgKHVuc2lnbmVkIGlu
dCkgdG8gPiB0ZXh0Qm94LT5sZW4oKSkKLSAgICAgICAgdG8gPSB0ZXh0Qm94LT5sZW4oKTsKLQot
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRCb3gtPm9iamVjdCgpLT5zdHlsZSgpOwotICAg
IFNWR0lubGluZVRleHRCb3gqIHN2Z1RleHRCb3ggPSBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0
Qm94Kj4odGV4dEJveCk7Ci0KLSAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHsK
LSAgICAgICAgaW50IG9mZnNldCA9IHRleHRCb3gtPm1fcmV2ZXJzZWQgPyB0ZXh0Qm94LT5lbmQo
KSAtIGkgOiB0ZXh0Qm94LT5zdGFydCgpICsgaTsKLQotICAgICAgICBpZiAoIWlzVmVydGljYWxU
ZXh0KQotICAgICAgICAgICAgdG90YWxBZHZhbmNlICs9IHN2Z1RleHRCb3gtPmNhbGN1bGF0ZUds
eXBoV2lkdGgoc3R5bGUsIG9mZnNldCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRvdGFs
QWR2YW5jZSArPSBzdmdUZXh0Qm94LT5jYWxjdWxhdGVHbHlwaEhlaWdodChzdHlsZSwgb2Zmc2V0
KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRvdGFsQWR2YW5jZU9mSW5saW5lQm94KElubGlu
ZUZsb3dCb3gqIHN0YXJ0LCBib29sIGlzVmVydGljYWxUZXh0LCBmbG9hdCYgdG90YWxBZHZhbmNl
KQotewotICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAoY3Vyci0+b2JqZWN0
KCktPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3Rh
dGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KGN1cnIpOwotICAgICAgICAgICAgdG90YWxBZHZhbmNl
T2ZJbmxpbmVUZXh0Qm94KHRleHRCb3gsIDAsIHRleHRCb3gtPmxlbigpLCBpc1ZlcnRpY2FsVGV4
dCwgdG90YWxBZHZhbmNlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChj
dXJyLT5pc0lubGluZUZsb3dCb3goKSk7Ci0gICAgICAgICAgICB0b3RhbEFkdmFuY2VPZklubGlu
ZUJveChzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY3VyciksIGlzVmVydGljYWxUZXh0LCB0
b3RhbEFkdmFuY2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIFNWR1Jvb3RJbmxpbmVC
b3g6OmJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oSW5saW5lRmxvd0JveCogc3RhcnQsIFNWR0NoYXJh
Y3RlckxheW91dEluZm8mIGluZm8pCiB7CiAgICAgaWYgKHN0YXJ0LT5pc1Jvb3RJbmxpbmVCb3go
KSkgewpAQCAtNjg2LDI3ICs2OTYsNTAgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzQW5j
aG9yKSB7CiAgICAgICAgICAgICAgICAgaW5mby5zZXRJblBhdGhMYXlvdXQodHJ1ZSk7CiAKLSAg
ICAgICAgICAgICAgICBmbG9hdCB0ZXh0QW5jaG9yU3RhcnRPZmZzZXQgPSAwLjBmOwotICAgICAg
ICAgICAgICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoZmxv
d0JveC0+b2JqZWN0KCktPnN0eWxlKCktPnN2Z1N0eWxlKCkpOworICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSB0ZXh0LWFuY2hvci90ZXh0TGVuZ3RoIG9uIHBhdGgsIHdoaWNoIGlzIHNwZWNpYWwu
CisgICAgICAgICAgICAgICAgU1ZHRWxlbWVudCogdGV4dEVsZW1lbnQgPSBzdmdfZHluYW1pY19j
YXN0KGZsb3dCb3gtPm9iamVjdCgpLT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIEFTU0VS
VCh0ZXh0RWxlbWVudCk7CiAKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGV4dC1hbmNob3Ig
b24gcGF0aCwgd2hpY2ggaXMgc3BlY2lhbC4KKyAgICAgICAgICAgICAgICBTVkdUZXh0Q29udGVu
dEVsZW1lbnQqIHRleHRDb250ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50
Kj4odGV4dEVsZW1lbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0ZXh0Q29udGVudCk7CisK
KyAgICAgICAgICAgICAgICBFTGVuZ3RoQWRqdXN0IGxlbmd0aEFkanVzdCA9IChFTGVuZ3RoQWRq
dXN0KSB0ZXh0Q29udGVudC0+bGVuZ3RoQWRqdXN0KCk7CiAgICAgICAgICAgICAgICAgRVRleHRB
bmNob3IgYW5jaG9yID0gZmxvd0JveC0+b2JqZWN0KCktPnN0eWxlKCktPnN2Z1N0eWxlKCktPnRl
eHRBbmNob3IoKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGFuY2hvcikgewotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRBX0VORDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUQV9NSURE
TEU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IHRvdGFsQWR2YW5jZSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEFkdmFu
Y2VPZklubGluZUJveChmbG93Qm94LCBpc1ZlcnRpY2FsVGV4dCwgdG90YWxBZHZhbmNlKTsKKyAg
ICAgICAgICAgICAgICBmbG9hdCB0ZXh0QW5jaG9yU3RhcnRPZmZzZXQgPSAwLjBmOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yID09IFRBX0VORCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0QW5jaG9yU3RhcnRPZmZzZXQgLT0gdG90YWxBZHZhbmNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHRBbmNob3JTdGFydE9mZnNldCAtPSB0b3RhbEFkdmFuY2UgLyAyLjBmOworICAgICAgICAgICAg
ICAgIC8vIEluaXRpYWxpemUgc3ViLWxheW91dC4gV2UgbmVlZCB0byBjcmVhdGUgdGV4dCBjaHVu
a3MgZnJvbSB0aGUgdGV4dFBhdGgKKyAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiB1c2luZyBv
dXIgc3RhbmRhcmQgbGF5b3V0IGNvZGUsIHRvIGJlIGFibGUgdG8gbWVhc3VyZSB0aGUKKyAgICAg
ICAgICAgICAgICAvLyB0ZXh0IGxlbmd0aCB1c2luZyBvdXIgbm9ybWFsIG1ldGhvZHMgYW5kIG5v
dCB0ZXh0UGF0aCBzcGVjaWZpYyBoYWNrcy4KKyAgICAgICAgICAgICAgICBWZWN0b3I8U1ZHQ2hh
cj4gdGVtcENoYXJzOworICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+IHRlbXBD
aHVua3M7CisKKyAgICAgICAgICAgICAgICBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvIHRlbXBJbmZv
KHRlbXBDaGFycyk7CisgICAgICAgICAgICAgICAgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbihmbG93
Qm94LCB0ZW1wSW5mbyk7CisKKyAgICAgICAgICAgICAgICBidWlsZFRleHRDaHVua3ModGVtcENo
YXJzLCB0ZW1wQ2h1bmtzLCBmbG93Qm94KTsKKworICAgICAgICAgICAgICAgIFZlY3RvcjxTVkdU
ZXh0Q2h1bms+OjppdGVyYXRvciBpdCA9IHRlbXBDaHVua3MuYmVnaW4oKTsKKyAgICAgICAgICAg
ICAgICBWZWN0b3I8U1ZHVGV4dENodW5rPjo6aXRlcmF0b3IgZW5kID0gdGVtcENodW5rcy5lbmQo
KTsKKworICAgICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07CisgICAgICAgICAgICAg
ICAgZmxvYXQgY29tcHV0ZWRMZW5ndGggPSAwLjBmOworIAorICAgICAgICAgICAgICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICAgICAgU1ZHVGV4dENodW5rJiBj
aHVuayA9ICppdDsKKworICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSB0ZXh0LWxlbmd0aCBj
YWxjdWxhdGlvbgorICAgICAgICAgICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFkdmFuY2UgKz0g
Y2FsY3VsYXRlVGV4dExlbmd0aENvcnJlY3Rpb25Gb3JUZXh0Q2h1bmsoY2h1bmssIGxlbmd0aEFk
anVzdCwgY29tcHV0ZWRMZW5ndGgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGhB
ZGp1c3QgPT0gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpMRU5HVEhBREpVU1RfU1BBQ0lOR0FOREdM
WVBIUykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5wYXRoVGV4dExlbmd0aCArPSBj
b21wdXRlZExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ucGF0aENodW5rTGVu
Z3RoICs9IGNodW5rLnRleHRMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBUQV9TVEFSVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRl
IHRleHQtYW5jaG9yIHN0YXJ0IG9mZnNldAorICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9y
ID09IFRBX1NUQVJUKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dEFuY2hvclN0YXJ0T2Zmc2V0ICs9IGNhbGN1bGF0ZVRleHRBbmNo
b3JTaGlmdEZvclRleHRDaHVuayhjaHVuaywgYW5jaG9yKTsKICAgICAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgICAgICBpbmZvLmFkZExheW91dEluZm9ybWF0aW9uKGZsb3dCb3gsIHRleHRB
bmNob3JTdGFydE9mZnNldCk7CkBAIC04MzksNiArODcyLDcgQEAKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0ZXh0LT5zdHlsZSh0ZXh0Qm94LT5pc0ZpcnN0TGluZVN0eWxlKCkpOwogICAgIEFT
U0VSVChzdHlsZSk7CiAKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKICAg
ICBTVkdJbmxpbmVUZXh0Qm94KiBzdmdUZXh0Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4
dEJveCo+KHRleHRCb3gpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dEJveC0+bGVuKCk7
CkBAIC04NTIsMTIgKzg4NiwxMiBAQAogICAgICAgICBmbG9hdCBnbHlwaFdpZHRoID0gMC4wZjsK
ICAgICAgICAgZmxvYXQgZ2x5cGhIZWlnaHQgPSAwLjBmOwogCi0gICAgICAgIGlmICghdGV4dEJv
eC0+bV9yZXZlcnNlZCkgeworICAgICAgICBpZiAodGV4dEJveC0+bV9yZXZlcnNlZCkgeworICAg
ICAgICAgICAgZ2x5cGhXaWR0aCA9IHN2Z1RleHRCb3gtPmNhbGN1bGF0ZUdseXBoV2lkdGgoc3R5
bGUsIHRleHRCb3gtPmVuZCgpIC0gaSk7CisgICAgICAgICAgICBnbHlwaEhlaWdodCA9IHN2Z1Rl
eHRCb3gtPmNhbGN1bGF0ZUdseXBoSGVpZ2h0KHN0eWxlLCB0ZXh0Qm94LT5lbmQoKSAtIGkpOwor
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZ2x5cGhXaWR0aCA9IHN2Z1RleHRCb3gtPmNh
bGN1bGF0ZUdseXBoV2lkdGgoc3R5bGUsIHRleHRCb3gtPnN0YXJ0KCkgKyBpKTsKICAgICAgICAg
ICAgIGdseXBoSGVpZ2h0ID0gc3ZnVGV4dEJveC0+Y2FsY3VsYXRlR2x5cGhIZWlnaHQoc3R5bGUs
IHRleHRCb3gtPnN0YXJ0KCkgKyBpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGds
eXBoV2lkdGggPSBzdmdUZXh0Qm94LT5jYWxjdWxhdGVHbHlwaFdpZHRoKHN0eWxlLCB0ZXh0Qm94
LT5lbmQoKSAtIGkpOwotICAgICAgICAgICAgZ2x5cGhIZWlnaHQgPSBzdmdUZXh0Qm94LT5jYWxj
dWxhdGVHbHlwaEhlaWdodChzdHlsZSwgdGV4dEJveC0+ZW5kKCkgLSBpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGJvb2wgYXNzaWduZWRYID0gZmFsc2U7CkBAIC05MDYsMTAgKzk0MCwzOCBAQAog
ICAgICAgICAgICAgICAgIGluZm8uY3VyeSArPSBkeTsKICAgICAgICAgfQogCi0gICAgICAgIC8v
IENhbGN1bGF0ZSBhYnNvbHV0ZSB4L3kgdmFsdWVzLCBpZiBuZWVkZWQKLSAgICAgICAgaWYgKCFp
bmZvLmluUGF0aExheW91dCgpKQotICAgICAgICAgICAgc3ZnQ2hhci52aXNpYmxlID0gdHJ1ZTsK
LSAgICAgICAgZWxzZSB7CisgICAgICAgIC8vIFRha2UgbGV0dGVyICYgd29yZCBzcGFjaW5nIGFu
ZCBrZXJuaW5nIGludG8gYWNjb3VudAorICAgICAgICBmbG9hdCBzcGFjaW5nID0gZm9udC5sZXR0
ZXJTcGFjaW5nKCkgKyBjYWxjdWxhdGVLZXJuaW5nKHRleHRCb3gtPm9iamVjdCgpLT5lbGVtZW50
KCktPnJlbmRlcmVyKCkpOworCisgICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVy
ID0gdGV4dC0+Y2hhcmFjdGVycygpICsgKHRleHRCb3gtPm1fcmV2ZXJzZWQgPyB0ZXh0Qm94LT5l
bmQoKSAtIGkgOiB0ZXh0Qm94LT5zdGFydCgpICsgaSk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBs
YXN0Q2hhcmFjdGVyID0gMDsKKworICAgICAgICBpZiAodGV4dEJveC0+bV9yZXZlcnNlZCkgewor
ICAgICAgICAgICAgaWYgKGkgPCB0ZXh0Qm94LT5lbmQoKSkKKyAgICAgICAgICAgICAgICBsYXN0
Q2hhcmFjdGVyID0gdGV4dC0+Y2hhcmFjdGVycygpICsgdGV4dEJveC0+ZW5kKCkgLSBpICsgIDE7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAg
ICAgbGFzdENoYXJhY3RlciA9IHRleHQtPmNoYXJhY3RlcnMoKSArIHRleHRCb3gtPnN0YXJ0KCkg
KyBpIC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbmZvLm5leHREcmF3blNlcGVyYXRl
ZCB8fCBzcGFjaW5nICE9IDAuMGYpIHsKKyAgICAgICAgICAgIGluZm8ubmV4dERyYXduU2VwZXJh
dGVkID0gZmFsc2U7CisgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICYmIEZvbnQ6OnRyZWF0
QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYgbGFzdENoYXJhY3RlciAmJiAhRm9udDo6dHJl
YXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAgc3BhY2luZyArPSBmb250
LndvcmRTcGFjaW5nKCk7CisKKyAgICAgICAgICAgIGlmIChzcGFjaW5nICE9IDAuMGYgJiYgIWlu
Zm8uaW5QYXRoTGF5b3V0KCkpCisgICAgICAgICAgICAgICAgaW5mby5uZXh0RHJhd25TZXBlcmF0
ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgc3ZnQ2hhci5wYXRoWFNjYWxlID0gMS4w
ZjsKKyAgICAgICAgc3ZnQ2hhci5wYXRoWVNjYWxlID0gMS4wZjsKKyAgICAgICAgc3ZnQ2hhci52
aXNpYmxlID0gdHJ1ZTsKKworICAgICAgICAvLyBIYW5kbGUgdGV4dFBhdGggbGF5b3V0IG1vZGUK
KyAgICAgICAgaWYgKGluZm8uaW5QYXRoTGF5b3V0KCkpIHsKICAgICAgICAgICAgIGZsb2F0IGds
eXBoQWR2YW5jZSA9IGlzVmVydGljYWxUZXh0ID8gZ2x5cGhIZWlnaHQgOiBnbHlwaFdpZHRoOwog
ICAgICAgICAgICAgZmxvYXQgZXh0cmFBZHZhbmNlID0gaXNWZXJ0aWNhbFRleHQgPyBkeSA6IGR4
OwogCkBAIC05MjAsOCArOTgyLDI3IEBACiAgICAgICAgICAgICBlbHNlIGlmIChhc3NpZ25lZFkg
JiYgaXNWZXJ0aWNhbFRleHQpCiAgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gaW5mby5jdXJ5
OwogCi0gICAgICAgICAgICBzdmdDaGFyLnZpc2libGUgPSBpbmZvLm5leHRQYXRoTGF5b3V0UG9p
bnRBbmRBbmdsZShpbmZvLmN1cngsIGluZm8uY3VyeSwgaW5mby5hbmdsZSwgZ2x5cGhBZHZhbmNl
LCBleHRyYUFkdmFuY2UsIG5ld09mZnNldCk7CisgICAgICAgICAgICAvLyBIYW5kbGUgbGVuZ3Ro
QWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiBieSBzcGVjaWZ5aW5nIHBlci1jaGFyYWN0ZXIgc2Nh
bGUgb3BlcmF0aW9ucworICAgICAgICAgICAgaWYgKGluZm8ucGF0aFRleHRMZW5ndGggPiAwLjBm
ICYmIGluZm8ucGF0aENodW5rTGVuZ3RoID4gMC4wZikgeyAKKyAgICAgICAgICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoWVNjYWxl
ID0gaW5mby5wYXRoQ2h1bmtMZW5ndGggLyBpbmZvLnBhdGhUZXh0TGVuZ3RoOworICAgICAgICAg
ICAgICAgICAgICBzcGFjaW5nICo9IHN2Z0NoYXIucGF0aFlTY2FsZTsKKyAgICAgICAgICAgICAg
ICAgICAgZ2x5cGhBZHZhbmNlICo9IHN2Z0NoYXIucGF0aFlTY2FsZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhYU2NhbGUgPSBpbmZv
LnBhdGhDaHVua0xlbmd0aCAvIGluZm8ucGF0aFRleHRMZW5ndGg7CisgICAgICAgICAgICAgICAg
ICAgIHNwYWNpbmcgKj0gc3ZnQ2hhci5wYXRoWFNjYWxlOworICAgICAgICAgICAgICAgICAgICBn
bHlwaEFkdmFuY2UgKj0gc3ZnQ2hhci5wYXRoWFNjYWxlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSGFuZGxlIGxldHRlciAmIHdvcmQgc3BhY2lu
ZyBvbiB0ZXh0IHBhdGgKKyAgICAgICAgICAgIGZsb2F0IHBhdGhFeHRyYUFkdmFuY2UgPSBpbmZv
LnBhdGhFeHRyYUFkdmFuY2U7CisgICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFkdmFuY2UgKz0g
c3BhY2luZzsKKworICAgICAgICAgICAgc3ZnQ2hhci52aXNpYmxlID0gaW5mby5uZXh0UGF0aExh
eW91dFBvaW50QW5kQW5nbGUoZ2x5cGhBZHZhbmNlLCBleHRyYUFkdmFuY2UsIG5ld09mZnNldCk7
CiAgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKKworICAgICAgICAg
ICAgaW5mby5wYXRoRXh0cmFBZHZhbmNlID0gcGF0aEV4dHJhQWR2YW5jZTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIEFwcGx5IHJvdGF0aW9uCkBAIC05NTUsMTEgKzEwMzYsMTEgQEAKIAogICAg
ICAgICAgICAgLy8gVHJhbnNsYXRlIHRvIGdseXBoIG1pZHBvaW50CiAgICAgICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpIHsKKyAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhYU2hpZnQgKz0g
aW5mby5keDsKICAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhZU2hpZnQgLT0gZ2x5cGhIZWln
aHQgLyAyLjBmOwotICAgICAgICAgICAgICAgIHN2Z0NoYXIucGF0aFhTaGlmdCArPSBpbmZvLmR4
OwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhYU2hp
ZnQgLT0gZ2x5cGhXaWR0aCAvIDIuMGY7CiAgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoWVNo
aWZ0ICs9IGluZm8uZHk7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoWFNoaWZ0IC09IGds
eXBoV2lkdGggLyAyLjBmOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgCkBAIC05NzUsMjkg
KzEwNTYsMzAgQEAKICAgICAgICAgaWYgKHN2Z0NoYXIuYW5nbGUgIT0gMC4wZikKICAgICAgICAg
ICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwogCi0gICAgICAgIC8vIEFkdmFuY2Ug
Y3VycmVudCBwb3NpdGlvbgotICAgICAgICBpZiAoIWlzVmVydGljYWxUZXh0KQotICAgICAgICAg
ICAgaW5mby5jdXJ4ICs9IGdseXBoV2lkdGg7CisgICAgICAgIC8vIEFkdmFuY2UgdG8gbmV3IHBv
c2l0aW9uCisgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgIGluZm8uY3Vy
eSArPSBnbHlwaEhlaWdodCArIHNwYWNpbmc7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlu
Zm8uY3VyeSArPSBnbHlwaEhlaWdodDsKKyAgICAgICAgICAgIGluZm8uY3VyeCArPSBnbHlwaFdp
ZHRoICsgc3BhY2luZzsKIAotICAgICAgICBtX3N2Z0NoYXJzLmFwcGVuZChzdmdDaGFyKTsKKyAg
ICAgICAgLy8gQWR2YW5jZSB0byBuZXh0IGNoYXJhY3RlcgorICAgICAgICBpbmZvLnN2Z0NoYXJz
LmFwcGVuZChzdmdDaGFyKTsKICAgICAgICAgaW5mby5wcm9jZXNzZWRTaW5nbGVDaGFyYWN0ZXIo
KTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRUZXh0Q2h1bmtzKCkK
K3ZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdDaGFyPiYg
c3ZnQ2hhcnMsIFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBzdmdUZXh0Q2h1bmtzLCBJbmxpbmVGbG93
Qm94KiBzdGFydCkKIHsKLSAgICBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvIGluZm87Ci0gICAgaW5m
by5pdCA9IG1fc3ZnQ2hhcnMuYmVnaW4oKTsKLSAgICBpbmZvLmNodW5rLnN0YXJ0ID0gbV9zdmdD
aGFycy5iZWdpbigpOwotICAgIGluZm8uY2h1bmsuZW5kID0gbV9zdmdDaGFycy5iZWdpbigpOwor
ICAgIFNWR1RleHRDaHVua0xheW91dEluZm8gaW5mbyhzdmdUZXh0Q2h1bmtzKTsKKyAgICBpbmZv
Lml0ID0gc3ZnQ2hhcnMuYmVnaW4oKTsKKyAgICBpbmZvLmNodW5rLnN0YXJ0ID0gc3ZnQ2hhcnMu
YmVnaW4oKTsKKyAgICBpbmZvLmNodW5rLmVuZCA9IHN2Z0NoYXJzLmJlZ2luKCk7CiAKLSAgICBi
dWlsZFRleHRDaHVua3ModGhpcywgaW5mbyk7Ci0gICAgQVNTRVJUKGluZm8uaXQgPT0gbV9zdmdD
aGFycy5lbmQoKSk7CisgICAgYnVpbGRUZXh0Q2h1bmtzKHN2Z0NoYXJzLCBzdGFydCwgaW5mbyk7
CisgICAgQVNTRVJUKGluZm8uaXQgPT0gc3ZnQ2hhcnMuZW5kKCkpOwogfQogCi12b2lkIFNWR1Jv
b3RJbmxpbmVCb3g6OmJ1aWxkVGV4dENodW5rcyhJbmxpbmVGbG93Qm94KiBzdGFydCwgU1ZHVGV4
dENodW5rTGF5b3V0SW5mbyYgaW5mbykKK3ZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRUZXh0
Q2h1bmtzKFZlY3RvcjxTVkdDaGFyPiYgc3ZnQ2hhcnMsIElubGluZUZsb3dCb3gqIHN0YXJ0LCBT
VkdUZXh0Q2h1bmtMYXlvdXRJbmZvJiBpbmZvKQogewogI2lmIERFQlVHX0NIVU5LX0JVSUxESU5H
ID4gMQogICAgIGZwcmludGYoc3RkZXJyLCAiIC0+IGJ1aWxkVGV4dENodW5rcyhzdGFydD0lcClc
biIsIHN0YXJ0KTsKQEAgLTEwMjYsNyArMTEwOCw3IEBACiAgICAgICAgICAgICBBU1NFUlQodGV4
dENvbnRlbnQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTdGFydCBuZXcgY2hhcmFj
dGVyIHJhbmdlIGZvciB0aGUgZmlyc3QgY2h1bmsKLSAgICAgICAgICAgIGJvb2wgaXNGaXJzdENo
YXJhY3RlciA9IG1fc3ZnVGV4dENodW5rcy5pc0VtcHR5KCkgJiYgaW5mby5jaHVuay5zdGFydCA9
PSBpbmZvLml0ICYmIGluZm8uY2h1bmsuc3RhcnQgPT0gaW5mby5jaHVuay5lbmQ7CisgICAgICAg
ICAgICBib29sIGlzRmlyc3RDaGFyYWN0ZXIgPSBpbmZvLnN2Z1RleHRDaHVua3MuaXNFbXB0eSgp
ICYmIGluZm8uY2h1bmsuc3RhcnQgPT0gaW5mby5pdCAmJiBpbmZvLmNodW5rLnN0YXJ0ID09IGlu
Zm8uY2h1bmsuZW5kOwogICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGFyYWN0ZXIpIHsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoaW5mby5jaHVuay5ib3hlcy5pc0VtcHR5KCkpOwogICAgICAgICAg
ICAgICAgIGluZm8uY2h1bmsuYm94ZXMuYXBwZW5kKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdl
KCkpOwpAQCAtMTAzNSw3ICsxMTE3LDcgQEAKIAogICAgICAgICAgICAgLy8gV2FsayBzdHJpbmcg
dG8gZmluZCBvdXQgbmV3IGNodW5rIHBvc2l0aW9ucywgaWYgZXhpc3RhbnQKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IEFTU0VSVChpbmZvLml0ICE9IG1fc3ZnQ2hhcnMuZW5kKCkpOworICAgICAgICAgICAgICAgIEFT
U0VSVChpbmZvLml0ICE9IHN2Z0NoYXJzLmVuZCgpKTsKIAogICAgICAgICAgICAgICAgIFNWR0lu
bGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSA9IGluZm8uY2h1bmsuYm94ZXMubGFzdCgpOwog
ICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc09wZW4oKSkgewpAQCAtMTA2OCw3ICsxMTUwLDcg
QEAKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFyYW5nZS5pc0Nsb3NlZCgpKTsKIAogICAg
ICAgICAgICAgICAgICAgICByYW5nZS5lbmRPZmZzZXQgPSBpOwotICAgICAgICAgICAgICAgICAg
ICBjbG9zZVRleHRDaHVuayhpbmZvLCBtX3N2Z1RleHRDaHVua3MpOworICAgICAgICAgICAgICAg
ICAgICBjbG9zZVRleHRDaHVuayhpbmZvKTsKIAogI2lmIERFQlVHX0NIVU5LX0JVSUxESU5HID4g
MQogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8IC0+IENsb3NlIG1pZC10
ZXh0IGNodW5rLCBhdCBlbmRPZmZzZXQ6ICVpIGFuZCBzdGFydGluZyBuZXcgbWlkIGNodW5rIVxu
IiwgcmFuZ2UuZW5kT2Zmc2V0KTsKQEAgLTExMTksNyArMTIwMSw3IEBACiAgICAgICAgICAgICAg
ICAgLy8gQ3VycmVudCB0ZXh0IGNodW5rIGlzIG5vdCB5ZXQgY2xvc2VkLiBGaW5pc2ggdGhlIGN1
cnJlbnQgcmFuZ2UsIGJ1dCBkb24ndCBzdGFydCBhIG5ldyBjaHVuay4KICAgICAgICAgICAgICAg
ICByYW5nZS5lbmRPZmZzZXQgPSBsZW5ndGg7CiAKLSAgICAgICAgICAgICAgICBpZiAoaW5mby5p
dCAhPSBtX3N2Z0NoYXJzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uaXQgIT0g
c3ZnQ2hhcnMuZW5kKCkpIHsKICNpZiBERUJVR19DSFVOS19CVUlMRElORyA+IDEKICAgICAgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gTm90IGF0IGxhc3QgY2hhcmFjdGVyIHll
dCFcbiIpOwogI2VuZGlmCkBAIC0xMTMxLDcgKzEyMTMsNyBAQAogICAgICAgICAgICAgICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gTmV4dCBjaGFyYWN0ZXIgc3RhcnRzIG5ldyBjaHVu
ayEgQ2xvc2luZyBjdXJyZW50IGNodW5rLCBhbmQgc3RhcnRpbmcgYSBuZXcgb25lLi4uXG4iKTsK
ICNlbmRpZgogCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVRleHRDaHVuayhpbmZvLCBt
X3N2Z1RleHRDaHVua3MpOworICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VUZXh0Q2h1bmso
aW5mbyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRleHRDaHVuayhpbmZvKTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1
c3Qgc3RhcnQgYSBuZXcgY2hhcmFjdGVyIHJhbmdlCkBAIC0xMTQ3LDcgKzEyMjksNyBAQAogI2Vu
ZGlmCiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgZmluYWwgY2h1bmssIG9uY2Ugd2Un
cmUgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBib3gKLSAgICAgICAgICAgICAgICAgICAgY2xvc2VU
ZXh0Q2h1bmsoaW5mbywgbV9zdmdUZXh0Q2h1bmtzKTsKKyAgICAgICAgICAgICAgICAgICAgY2xv
c2VUZXh0Q2h1bmsoaW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewpAQCAtMTE2Myw3ICsxMjQ1LDcgQEAKICAgICAgICAgICAgIGlmIChpc1Rl
eHRQYXRoKQogICAgICAgICAgICAgICAgIGluZm8uaGFuZGxpbmdUZXh0UGF0aCA9IHRydWU7CiAK
LSAgICAgICAgICAgIGJ1aWxkVGV4dENodW5rcyhmbG93Qm94LCBpbmZvKTsKKyAgICAgICAgICAg
IGJ1aWxkVGV4dENodW5rcyhzdmdDaGFycywgZmxvd0JveCwgaW5mbyk7CiAKICAgICAgICAgICAg
IGlmIChpc1RleHRQYXRoKQogICAgICAgICAgICAgICAgIGluZm8uaGFuZGxpbmdUZXh0UGF0aCA9
IGZhbHNlOwpAQCAtMTIwNSwxMSArMTI4NywxMyBAQAogICAgICAgICB9CiAjZW5kaWYKIAotICAg
ICAgICAvLyB0ZXh0LXBhdGggJiB0ZXh0LWFuY2hvci90ZXh0TGVuZ3RoIG5lZWQgc3BlY2lhbCB0
cmVhdG1lbnQuCiAgICAgICAgIGlmIChjaHVuay5pc1RleHRQYXRoKQogICAgICAgICAgICAgY29u
dGludWU7CiAKKyAgICAgICAgLy8gdGV4dC1wYXRoICYgdGV4dExlbmd0aCwgd2l0aCBsZW5ndGhB
ZGp1c3Q9InNwYWNpbmciIGlzIGFscmVhZHkgaGFuZGxlZCBmb3IgdGV4dFBhdGggbGF5b3V0cy4K
ICAgICAgICAgYXBwbHlUZXh0TGVuZ3RoQ29ycmVjdGlvblRvVGV4dENodW5rKGNodW5rKTsKKyAK
KyAgICAgICAgLy8gdGV4dC1hbmNob3IgaXMgYWxyZWFkeSBoYW5kbGVkIGZvciB0ZXh0UGF0aCBs
YXlvdXRzLgogICAgICAgICBhcHBseVRleHRBbmNob3JUb1RleHRDaHVuayhjaHVuayk7CiAgICAg
fQogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5j
cHAJKHJldmlzaW9uIDI2ODEzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5
b3V0SW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAKICAgICByZXR1cm4g
YmFzZWxpbmVTaGlmdDsKIH0KIAotU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6U1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mbygpCitTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpTVkdDaGFyYWN0ZXJMYXlvdXRJ
bmZvKFZlY3RvcjxTVkdDaGFyPiYgY2hhcnMpCiAgICAgOiBjdXJ4KDAuMGYpCiAgICAgLCBjdXJ5
KDAuMGYpCiAgICAgLCBhbmdsZSgwLjBmKQpAQCAtNzcsNiArNzcsMTEgQEAKICAgICAsIGR5KDAu
MGYpCiAgICAgLCBzaGlmdHgoMC4wZikKICAgICAsIHNoaWZ0eSgwLjBmKQorICAgICwgcGF0aEV4
dHJhQWR2YW5jZSgwLjBmKQorICAgICwgcGF0aFRleHRMZW5ndGgoMC4wZikKKyAgICAsIHBhdGhD
aHVua0xlbmd0aCgwLjBmKQorICAgICwgc3ZnQ2hhcnMoY2hhcnMpCisgICAgLCBuZXh0RHJhd25T
ZXBlcmF0ZWQoZmFsc2UpCiAgICAgLCB4U3RhY2tDaGFuZ2VkKGZhbHNlKQogICAgICwgeVN0YWNr
Q2hhbmdlZChmYWxzZSkKICAgICAsIGR4U3RhY2tDaGFuZ2VkKGZhbHNlKQpAQCAtMjE3LDcgKzIy
Miw3IEBACiAgICAgfQogfQogCi1ib29sIFNWR0NoYXJhY3RlckxheW91dEluZm86Om5leHRQYXRo
TGF5b3V0UG9pbnRBbmRBbmdsZShmbG9hdCYgeCwgZmxvYXQmIHksIGZsb2F0JiBhbmdsZSwgZmxv
YXQgZ2x5cGhBZHZhbmNlLCBmbG9hdCBleHRyYUFkdmFuY2UsIGZsb2F0IG5ld09mZnNldCkKK2Jv
b2wgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6bmV4dFBhdGhMYXlvdXRQb2ludEFuZEFuZ2xlKGZs
b2F0IGdseXBoQWR2YW5jZSwgZmxvYXQgZXh0cmFBZHZhbmNlLCBmbG9hdCBuZXdPZmZzZXQpCiB7
CiAgICAgaWYgKGxheW91dFBhdGhMZW5ndGggPD0gMC4wZikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjI5LDcgKzIzNCw3IEBACiAgICAgY3VycmVudE9mZnNldCArPSBleHRyYUFkdmFuY2U7
CiAKICAgICBmbG9hdCBvZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgZ2x5cGhBZHZhbmNlIC8gMi4w
ZjsKLSAgICBjdXJyZW50T2Zmc2V0ICs9IGdseXBoQWR2YW5jZTsKKyAgICBjdXJyZW50T2Zmc2V0
ICs9IGdseXBoQWR2YW5jZSArIHBhdGhFeHRyYUFkdmFuY2U7CiAKICAgICBpZiAob2Zmc2V0IDwg
MC4wZiB8fCBvZmZzZXQgPiBsYXlvdXRQYXRoTGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yMzgsOCArMjQzLDggQEAKICAgICBGbG9hdFBvaW50IHBvaW50ID0gbGF5b3V0UGF0aC5w
b2ludEF0TGVuZ3RoKG9mZnNldCwgb2spOwogICAgIEFTU0VSVChvayk7CiAKLSAgICB4ID0gcG9p
bnQueCgpOwotICAgIHkgPSBwb2ludC55KCk7CisgICAgY3VyeCA9IHBvaW50LngoKTsKKyAgICBj
dXJ5ID0gcG9pbnQueSgpOwogCiAgICAgYW5nbGUgPSBsYXlvdXRQYXRoLm5vcm1hbEFuZ2xlQXRM
ZW5ndGgob2Zmc2V0LCBvayk7CiAgICAgQVNTRVJUKG9rKTsKQEAgLTI1Niw2ICsyNjEsMTAgQEAK
IHZvaWQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6c2V0SW5QYXRoTGF5b3V0KGJvb2wgdmFsdWUp
CiB7CiAgICAgcGF0aExheW91dCA9IHZhbHVlOworCisgICAgcGF0aEV4dHJhQWR2YW5jZSA9IDAu
MGY7CisgICAgcGF0aFRleHRMZW5ndGggPSAwLjBmOworICAgIHBhdGhDaHVua0xlbmd0aCA9IDAu
MGY7CiB9CiAKIHZvaWQgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6YWRkTGF5b3V0SW5mb3JtYXRp
b24oSW5saW5lRmxvd0JveCogZmxvd0JveCwgZmxvYXQgdGV4dEFuY2hvclN0YXJ0T2Zmc2V0KQpA
QCAtMjY3LDYgKzI3Niw3IEBACiAKICAgICBSZW5kZXJTVkdUZXh0UGF0aCogdGV4dFBhdGggPSBz
dGF0aWNfY2FzdDxSZW5kZXJTVkdUZXh0UGF0aCo+KGZsb3dCb3gtPm9iamVjdCgpKTsKICAgICBQ
YXRoIHBhdGggPSB0ZXh0UGF0aC0+bGF5b3V0UGF0aCgpOworCiAgICAgZmxvYXQgYmFzZWxpbmVT
aGlmdCA9IGNhbGN1bGF0ZUJhc2VsaW5lU2hpZnQodGV4dFBhdGgpOwogCiAgICAgbGF5b3V0UGF0
aCA9IHBhdGg7CkBAIC01MDEsMTMgKzUxMSwxNSBAQAogewogICAgIEFmZmluZVRyYW5zZm9ybSBj
dG07CiAKLSAgICAvLyBSb3RhdGUgY2hhcmFjdGVyIGFyb3VuZCBhbmdsZSAKKyAgICAvLyBSb3Rh
dGUgY2hhcmFjdGVyIGFyb3VuZCBhbmdsZSwgYW5kIHBvc3NpYmx5IHNjYWxlLgorICAgIC8vIE9u
bHkgaGFwcGVucyBpbiB0ZXh0UGF0aCBsYXlvdXRzLiAKICAgICBjdG0udHJhbnNsYXRlKHgsIHkp
OwogICAgIGN0bS5yb3RhdGUoYW5nbGUpOworICAgIGN0bS5zY2FsZShwYXRoWFNjYWxlLCBwYXRo
WVNjYWxlKTsKICAgICBjdG0udHJhbnNsYXRlKC14LCAteSk7CiAKLSAgICAvLyBBcHBseSB0cmFu
c2Zvcm1hdGlvbnMgd2hpY2ggaGF2ZSB0byBiZSBhcHBsaWVkIGFmdGVyCi0gICAgLy8gdGhlIHJv
dGF0aW9uIC0gb25seSBoYXBwZW5zIHdpdGggdGV4dFBhdGguCisgICAgLy8gQXBwbHkgdHJhbnNm
b3JtYXRpb25zIHdoaWNoIGhhdmUgdG8gYmUgYXBwbGllZCBvcnRob2dvbmFsIHRvIHRoZSBwYXRo
CisgICAgLy8gT25seSBoYXBwZW5zIGluIHRleHRQYXRoIGxheW91dHMuCiAgICAgY3RtLnRyYW5z
bGF0ZShwYXRoWFNoaWZ0LCBwYXRoWVNoaWZ0KTsKIAogICAgIHJldHVybiBjdG07CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAyNjgxMykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCAr
NjMsOCBAQAogICAgIHZvaWQgYnVpbGRMYXlvdXRJbmZvcm1hdGlvbihJbmxpbmVGbG93Qm94KiBz
dGFydCwgU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYpOwogICAgIHZvaWQgYnVpbGRMYXlvdXRJbmZv
cm1hdGlvbkZvclRleHRCb3goU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYsIElubGluZVRleHRCb3gq
KTsKIAotICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKCk7Ci0gICAgdm9pZCBidWlsZFRleHRDaHVu
a3MoSW5saW5lRmxvd0JveCogc3RhcnQsIFNWR1RleHRDaHVua0xheW91dEluZm8mKTsKKyAgICB2
b2lkIGJ1aWxkVGV4dENodW5rcyhWZWN0b3I8U1ZHQ2hhcj4mLCBWZWN0b3I8U1ZHVGV4dENodW5r
PiYsIElubGluZUZsb3dCb3gqIHN0YXJ0KTsKKyAgICB2b2lkIGJ1aWxkVGV4dENodW5rcyhWZWN0
b3I8U1ZHQ2hhcj4mLCBJbmxpbmVGbG93Qm94KiBzdGFydCwgU1ZHVGV4dENodW5rTGF5b3V0SW5m
byYpOwogICAgIHZvaWQgbGF5b3V0VGV4dENodW5rcygpOwogCiAgICAgU1ZHVGV4dERlY29yYXRp
b25JbmZvIHJldHJpZXZlUGFpbnRTZXJ2ZXJzRm9yVGV4dERlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiBzdGFydCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdDaGFyYWN0ZXJMYXlvdXRJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5m
by5oCShyZXZpc2lvbiAyNjgxMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0NoYXJhY3Rlckxh
eW91dEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzQsOSArNzQsMTAgQEAKIH07CiAKIGNsYXNz
IFBvc2l0aW9uZWRGbG9hdFZlY3RvciA6IHB1YmxpYyBQb3NpdGlvbmVkVmVjdG9yPGZsb2F0PiB7
IH07CitzdHJ1Y3QgU1ZHQ2hhcjsKIAogc3RydWN0IFNWR0NoYXJhY3RlckxheW91dEluZm8gewot
ICAgIFNWR0NoYXJhY3RlckxheW91dEluZm8oKTsKKyAgICBTVkdDaGFyYWN0ZXJMYXlvdXRJbmZv
KFZlY3RvcjxTVkdDaGFyPiYpOwogCiAgICAgZW51bSBTdGFja1R5cGUgeyBYU3RhY2ssIFlTdGFj
aywgRHhTdGFjaywgRHlTdGFjaywgQW5nbGVTdGFjaywgQmFzZWxpbmVTaGlmdFN0YWNrIH07CiAK
QEAgLTk3LDEwICs5OCwxMCBAQAogICAgIHZvaWQgcHJvY2Vzc2VkQ2h1bmsoZmxvYXQgc2F2ZWRT
aGlmdFgsIGZsb2F0IHNhdmVkU2hpZnRZKTsKICAgICB2b2lkIHByb2Nlc3NlZFNpbmdsZUNoYXJh
Y3RlcigpOwogCi0gICAgYm9vbCBuZXh0UGF0aExheW91dFBvaW50QW5kQW5nbGUoZmxvYXQmIHgs
IGZsb2F0JiB5LCBmbG9hdCYgYW5nbGUsIGZsb2F0IGdseXBoQWR2YW5jZSwgZmxvYXQgZXh0cmFB
ZHZhbmNlLCBmbG9hdCBuZXdPZmZzZXQpOworICAgIGJvb2wgbmV4dFBhdGhMYXlvdXRQb2ludEFu
ZEFuZ2xlKGZsb2F0IGdseXBoQWR2YW5jZSwgZmxvYXQgZXh0cmFBZHZhbmNlLCBmbG9hdCBuZXdP
ZmZzZXQpOwogCiAgICAgLy8gVXNlZCBmb3IgdGV4dC1vbi1wYXRoLgotICAgIHZvaWQgYWRkTGF5
b3V0SW5mb3JtYXRpb24oSW5saW5lRmxvd0JveCosIGZsb2F0IHRleHRBbmNob3JPZmZzZXQgPSAw
LjApOworICAgIHZvaWQgYWRkTGF5b3V0SW5mb3JtYXRpb24oSW5saW5lRmxvd0JveCosIGZsb2F0
IHRleHRBbmNob3JPZmZzZXQgPSAwLjBmKTsKIAogICAgIGJvb2wgaW5QYXRoTGF5b3V0KCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRJblBhdGhMYXlvdXQoYm9vbCB2YWx1ZSk7CkBAIC0xMjMsNiArMTI0
LDE1IEBACiAgICAgZmxvYXQgc2hpZnR4OwogICAgIGZsb2F0IHNoaWZ0eTsKIAorICAgIC8vIFBh
dGggc3BlY2lmaWMgYWR2YW5jZSB2YWx1ZXMgdG8gaGFuZGxlIGxlbmd0aEFkanVzdAorICAgIGZs
b2F0IHBhdGhFeHRyYUFkdmFuY2U7CisgICAgZmxvYXQgcGF0aFRleHRMZW5ndGg7CisgICAgZmxv
YXQgcGF0aENodW5rTGVuZ3RoOworCisgICAgLy8gUmVzdWx0IHZlY3RvcgorICAgIFZlY3RvcjxT
VkdDaGFyPiYgc3ZnQ2hhcnM7CisgICAgYm9vbCBuZXh0RHJhd25TZXBlcmF0ZWQgOiAxOworCiBw
cml2YXRlOgogICAgIC8vIFVzZWQgZm9yIGJhc2VsaW5lLXNoaWZ0LgogICAgIHZvaWQgYWRkU3Rh
Y2tDb250ZW50KFN0YWNrVHlwZSwgZmxvYXQpOwpAQCAtMTcwLDYgKzE4MCw5IEBACiAgICAgZmxv
YXQgeTsKICAgICBmbG9hdCBhbmdsZTsKIAorICAgIGZsb2F0IHBhdGhYU2NhbGU7CisgICAgZmxv
YXQgcGF0aFlTY2FsZTsKKwogICAgIGZsb2F0IHBhdGhYU2hpZnQ7CiAgICAgZmxvYXQgcGF0aFlT
aGlmdDsKIApAQCAtMzM1LDE3ICszNDgsMjEgQEAKIH07CiAKIHN0cnVjdCBTVkdUZXh0Q2h1bmtM
YXlvdXRJbmZvIHsKLSAgICBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvKCkKKyAgICBTVkdUZXh0Q2h1
bmtMYXlvdXRJbmZvKFZlY3RvcjxTVkdUZXh0Q2h1bms+JiB0ZXh0Q2h1bmtzKQogICAgICAgICA6
IGFzc2lnbkNodW5rUHJvcGVydGllcyh0cnVlKQogICAgICAgICAsIGhhbmRsaW5nVGV4dFBhdGgo
ZmFsc2UpCisgICAgICAgICwgc3ZnVGV4dENodW5rcyh0ZXh0Q2h1bmtzKQorICAgICAgICAsIGl0
KDApCiAgICAgewogICAgIH0KIAogICAgIGJvb2wgYXNzaWduQ2h1bmtQcm9wZXJ0aWVzIDogMTsK
ICAgICBib29sIGhhbmRsaW5nVGV4dFBhdGggOiAxOwogCisgICAgVmVjdG9yPFNWR1RleHRDaHVu
az4mIHN2Z1RleHRDaHVua3M7CisgICAgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBpdDsKKwog
ICAgIFNWR1RleHRDaHVuayBjaHVuazsKLSAgICBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0
OwogfTsKIAogc3RydWN0IFNWR1RleHREZWNvcmF0aW9uSW5mbyB7CkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MTMp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisy
MDA3LTEwLTIwICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yICdrZXJuaW5nJyBwcm9wZXJ0eSBpbiBTVkcgdGV4dCBsYXlvdXQgY29kZS4KKyAgICAgICAg
U3VwcG9ydCBhbGwgdGV4dExlbmd0aC9sZW5ndGhBZGp1c3QgbW9kZXMgb24gbm9ybWFsIHRleHQg
JiB0ZXh0UGF0aHMuCisKKyAgICAgICAgU3VwcG9ydCBsZXR0ZXIgJiB3b3JkIHNwYWNpbmcgb24g
dGV4dFBhdGguCisgICAgICAgIEZpeCB0ZXh0IHNlbGVjdGlvbiB3aGVuIGFueSBzcGFjaW5nIChs
ZXR0ZXIvd29yZC9rZXJuaW5nKSBpcyBpbnZvbHZlZC4KKworICAgICAgICBGaXhlczogc3ZnL2Jh
dGlrL3RleHQvdGV4dE9uUGF0aFNwYWNlcy5zdmcgKHNwYWNpbmcpCisgICAgICAgICAgICAgICBz
dmcvYmF0aWsvdGV4dC90ZXh0TGF5b3V0LnN2ZyAoa2VybmluZyBzdXBwb3J0KQorICAgICAgICAg
ICAgICAgc3ZnL3RleHQvdGV4dC1zcGFjaW5nLTAxLWIuc3ZnICh0ZXh0IHNlbGVjdGlvbikKKwor
ICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVy
YXRvcjo6YWR2YW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vVGV4dFN0eWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0U3R5bGU6OlRleHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
U3R5bGU6OnNwYWNpbmdEaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0U3R5bGU6OmRp
c2FibGVTcGFjaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5m
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvOjpTVkdDaGFy
YWN0ZXJMYXlvdXRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NoYXJhY3RlckxheW91dElu
Zm86Om5leHRQYXRoTGF5b3V0UG9pbnRBbmRBbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdD
aGFyYWN0ZXJMYXlvdXRJbmZvOjpzZXRJblBhdGhMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbzo6YWRkTGF5b3V0SW5mb3JtYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQ2hhcjo6Y2hhcmFjdGVyVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJp
bmcvU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENo
dW5rTGF5b3V0SW5mbzo6U1ZHVGV4dENodW5rTGF5b3V0SW5mbyk6CisgICAgICAgICogcmVuZGVy
aW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VUZXh0Q2h1
bmspOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlS2VybmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSb290SW5saW5lQm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OnN2Z1RleHRTdHlsZUZvcklubGluZVRleHRCb3gpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FsY3VsYXRlVGV4dEFuY2hvclNoaWZ0Rm9yVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNv
cmU6OmFwcGx5VGV4dEFuY2hvclRvVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1
bGF0ZVRleHRMZW5ndGhDb3JyZWN0aW9uRm9yVGV4dENodW5rKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGx5VGV4dExlbmd0aENvcnJlY3Rpb25Ub1RleHRDaHVuayk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSb290SW5saW5lQm94Ojpjb21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlvdXRJbmZvcm1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpidWlsZExheW91dElu
Zm9ybWF0aW9uRm9yVGV4dEJveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94
OjpidWlsZFRleHRDaHVua3MpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6
bGF5b3V0VGV4dENodW5rcyk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3gu
aDoKKwogMjAwNy0xMC0xOSAgQWxwIFRva2VyICA8YWxwQGF0b2tlci5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyLgo=
</data>
<flag name="review"
          id="7076"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>