<?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>31383</bug_id>
          
          <creation_ts>2009-11-11 15:43:22 -0800</creation_ts>
          <short_desc>[V8] De-inline lots of V8Bindings functions to save 450k of code</short_desc>
          <delta_ts>2009-11-12 16:25:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>31217</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jens Alfke">jens</reporter>
          <assigned_to name="Jens Alfke">jens</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>162709</commentid>
    <comment_count>0</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-11 15:43:22 -0800</bug_when>
    <thetext>De-inlining a bunch of V8Bindings&apos; utility functions that are used ubiquitously by the generated V8 bindings, saves about 450k of code.
For the most part these simply had their bodies moved intact from the .h to the .cpp file, but I added a few small speed optimizations after looking at Shark profile data, e.g. in v8ExternalString.

This includes:
v8DOMWrapperToNative
v8ValueToWebCoreString
v8ValueToAtomicWebCoreString
toInt32
toWebCoreString
toWebCoreStringWithNullCheck
toAtomicWebCoreStringWithNullCheck
toWebCoreStringWithNullOrUndefinedCheck
isUndefinedOrNull
v8Boolean
v8UndetectableString
v8StringOrNull
v8StringOrUndefined
v8StringOrFalse
v8StringToWebCoreString
v8ExternalString

And a new function:
createRawTemplate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162716</commentid>
    <comment_count>1</comment_count>
      <attachid>43017</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-11 16:03:04 -0800</bug_when>
    <thetext>Created attachment 43017
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162719</commentid>
    <comment_count>2</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-11 16:11:38 -0800</bug_when>
    <thetext>Committed revision 50846.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43017</attachid>
            <date>2009-11-11 16:03:04 -0800</date>
            <delta_ts>2009-11-11 16:06:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>deInliningBindings.patch</filename>
            <type>text/plain</type>
            <size>26347</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDg0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMTEtMTEgIEplbnMgQWxma2UgIDxzbmVqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUg
QmlnIERlLUlubGluaW5nLiA0NTBrIGNvZGUgc2l6ZSByZWR1Y3Rpb24gKDMyLWJpdCB4ODYuKQor
ICAgICAgICAtIFZhcmlvdXMgaW5saW5lIGZ1bmN0aW9ucyBpbiBWOEJpbmRpbmcuaCBtYWRlIG5v
bi1pbmxpbmUuCisgICAgICAgIC0gU29tZSByZW5hbWluZyBmb3IgY29uc2lzdGVuY3kuCisgICAg
ICAgIC0gTmV3IGZ1bmN0aW9uIGNyZWF0ZVJhd1RlbXBsYXRlKCkuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTM4MworCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnY4RE9NV3JhcHBlclRvTmF0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnY4VmFsdWVUb1dlYkNvcmVTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6djhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp0b0lu
dDMyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjp0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
QXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6dG9X
ZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzVW5kZWZpbmVkT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OnY4Qm9vbGVhbik6CisgICAg
ICAgIChXZWJDb3JlOjp2OFVuZGV0ZWN0YWJsZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp2
OFN0cmluZ09yTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjp2OFN0cmluZ09yVW5kZWZpbmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnY4U3RyaW5nT3JGYWxzZSk6CisgICAgICAgIChXZWJDb3JlOjp2
OFN0cmluZ1RvV2ViQ29yZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjp2OEV4dGVybmFsU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJhd1RlbXBsYXRlKTogIE5ldyBmdW5jdGlv
bi4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6
OnY4RE9NV3JhcHBlclRvKToKKyAgICAgICAgKFdlYkNvcmU6OnY4RE9NV3JhcHBlclRvTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjp2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjp2OFN0cmluZ1RvQXRvbWljV2ViQ29yZVN0cmluZyk6CisKIDIwMDktMTEtMTEgIEpl
bnMgQWxma2UgIDxzbmVqQGNocm9taXVtLm9yZz4KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA1MDg0NCkKKysrIFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTM1
MCwxNSArMzUwLDE2IEBAIHN1YiBIb2xkZXJUb05hdGl2ZQogICAgIG15ICRkYXRhTm9kZSA9IHNo
aWZ0OwogICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CiAgICAgbXkgJGNsYXNzSW5kZXgg
PSBzaGlmdDsKKyAgICBteSAkaG9sZGVyID0gc2hpZnQgfHwgImhvbGRlciI7ICAgIyBvcHRpb25h
bCBwYXJhbQogCiAgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Ci0gICAgJGltcGxDbGFzc05hbWUqIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8JGltcGxDbGFzc05hbWU+KGhv
bGRlcik7CisgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHY4RE9NV3JhcHBlclRvTm9kZTwkaW1w
bENsYXNzTmFtZT4oJGhvbGRlcik7CiBFTkQKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8JGltcGxDbGFzc05hbWU+KFY4Q2xhc3NJ
bmRleDo6JGNsYXNzSW5kZXgsIGhvbGRlcik7CisgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHY4
RE9NV3JhcHBlclRvPCRpbXBsQ2xhc3NOYW1lPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCAk
aG9sZGVyKTsKIEVORAogCiAgIH0KQEAgLTM5Nyw3ICszOTgsNyBAQCBzdWIgR2VuZXJhdGVEb21h
aW5TYWZlRnVuY3Rpb25HZXR0ZXIKICAgICB9CiBFTkQKIAotICBIb2xkZXJUb05hdGl2ZSgkZGF0
YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CisgICAgSG9sZGVyVG9OYXRpdmUo
JGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOwogCiAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgPDxFTkQpOwogICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUo
aW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKQEAgLTQyOCw3ICs0MjksNyBAQCBFTkQKIAogICAgIGlm
ICgkY2xhc3NJbmRleCBlcSAiRE9NV0lORE9XIikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCA8PEVORCk7Ci0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBp
bmZvLkhvbGRlcigpKTsKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IHY4RE9NV3JhcHBlclRvPERP
TVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uSG9sZGVyKCkpOwogICAgIC8v
IEdldCB0aGUgcHJveHkgY29ycmVzcG9uZGluZyB0byB0aGUgRE9NV2luZG93IGlmIHBvc3NpYmxl
IHRvCiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGlzIGNv
bnN0cnVjdGVkIGluIHRoZQogICAgIC8vIGNvbnRleHQgb2YgdGhlIERPTVdpbmRvdyBhbmQgbm90
IGluIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsZXIuCkBAIC00MzcsNyArNDM4LDcgQEAgRU5ECiAg
ICAgfSBlbHNpZiAoJGNsYXNzSW5kZXggZXEgIkRFRElDQVRFRFdPUktFUkNPTlRFWFQiIG9yICRj
bGFzc0luZGV4IGVxICJXT1JLRVJDT05URVhUIiBvciAkY2xhc3NJbmRleCBlcSAiU0hBUkVEV09S
S0VSQ09OVEVYVCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siV29ya2VyQ29udGV4dEV4ZWN1
dGlvblByb3h5LmgifSA9IDE7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5E
KTsKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05U
RVhULCBpbmZvLkhvbGRlcigpKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0g
djhET01XcmFwcGVyVG88V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhU
LCBpbmZvLkhvbGRlcigpKTsKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rv
cih0eXBlLCB3b3JrZXJDb250ZXh0KTsKIEVORAogICAgIH0gZWxzZSB7CkBAIC01MDQsNyArNTA1
LDcgQEAgRU5ECiAKICAgICBpZiAoJGlzUG9kVHlwZSkgewogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCA8PEVORCk7Ci0gICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFt
ZT4qIGltcF93cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VjhT
VkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6OiRjbGFzc0lu
ZGV4LCBpbmZvLkhvbGRlcigpKTsKKyAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NO
YW1lPiogaW1wX3dyYXBwZXIgPSB2OERPTVdyYXBwZXJUbzxWOFNWR1BPRFR5cGVXcmFwcGVyPCRp
bXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkp
OwogICAgICRpbXBsQ2xhc3NOYW1lIGltcF9pbnN0YW5jZSA9ICppbXBfd3JhcHBlcjsKIEVORAog
ICAgICAgICBpZiAoJGdldHRlclN0cmluZ1VzZXNJbXApIHsKQEAgLTUyNSwxMiArNTI2LDEyIEBA
IEVORAogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7CiBFTkQKICAgICAgIH0KLSAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAk
aW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOworICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0
YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCwgImluZm8iKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwogRU5ECi0gICAgICAgIEhvbGRl
clRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4KTsKKyAgICAg
ICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgs
ICJpbmZvIik7CiAgICAgfQogCiAgICAgIyBHZW5lcmF0ZSBzZWN1cml0eSBjaGVja3MgaWYgbmVj
ZXNzYXJ5CkBAIC01NzcsMTAgKzU3OCw2IEBAIEVORAogICAgICAgICAkZ2V0dGVyU3RyaW5nID0g
ImltcF9pbnN0YW5jZSI7CiAgICAgfQogCi0gICAgaWYgKCRuYXRpdmVUeXBlIGVxICJTdHJpbmci
KSB7Ci0gICAgICAgICRnZXR0ZXJTdHJpbmcgPSAidG9TdHJpbmcoJGdldHRlclN0cmluZykiOwot
ICAgIH0KLQogICAgIG15ICRyZXN1bHQ7CiAgICAgbXkgJHdyYXBwZXI7CiAKQEAgLTY5NCw3ICs2
OTEsNyBAQCBzdWIgR2VuZXJhdGVOb3JtYWxBdHRyU2V0dGVyCiAgICAgaWYgKCRpc1BvZFR5cGUp
IHsKICAgICAgICAgJGltcGxDbGFzc05hbWUgPSBHZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1l
KTsKICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhTVkdQT0RUeXBlV3JhcHBlci5oIn0gPSAxOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8
JGltcGxDbGFzc05hbWU+KiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6
OiRjbGFzc0luZGV4LCBpbmZvLkhvbGRlcigpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+KiB3cmFw
cGVyID0gdjhET01XcmFwcGVyVG88VjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFtZT4g
PihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBpbmZvLkhvbGRlcigpKTtcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRpbXBsQ2xhc3NOYW1lIGltcF9pbnN0YW5j
ZSA9ICp3cmFwcGVyO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
JGltcGxDbGFzc05hbWUqIGltcCA9ICZpbXBfaW5zdGFuY2U7XG4iKTsKIApAQCAtNzEwLDEyICs3
MDcsMTIgQEAgRU5ECiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHJldHVybjsKIEVORAogICAg
ICAgfQotICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAk
Y2xhc3NJbmRleCk7CisgICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFz
c05hbWUsICRjbGFzc0luZGV4LCAiaW5mbyIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhv
bGRlciA9IGluZm8uSG9sZGVyKCk7CiBFTkQKLSAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFO
b2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOworICAgICAgICBIb2xkZXJUb05hdGl2
ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCwgImluZm8iKTsKICAgICB9
CiAKICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZSwgMCk7CkBAIC04NDUsNyArODQyLDcgQEAgc3ViIEdlbmVyYXRlRnVu
Y3Rpb25DYWxsYmFjawogCiAgICAgaWYgKElzUG9kVHlwZSgkaW1wbENsYXNzTmFtZSkpIHsKICAg
ICAgICAgbXkgJG5hdGl2ZUNsYXNzTmFtZSA9IEdldE5hdGl2ZVR5cGUoJGltcGxDbGFzc05hbWUp
OwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFY4U1ZHUE9EVHlwZVdyYXBw
ZXI8JG5hdGl2ZUNsYXNzTmFtZT4qIGltcF93cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjwkbmF0aXZlQ2xhc3NOYW1lPiA+KFY4
Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGFyZ3MuSG9sZGVyKCkpO1xuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkbmF0aXZlQ2xh
c3NOYW1lPiogaW1wX3dyYXBwZXIgPSB2OERPTVdyYXBwZXJUbzxWOFNWR1BPRFR5cGVXcmFwcGVy
PCRuYXRpdmVDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgYXJncy5Ib2xk
ZXIoKSk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkbmF0aXZl
Q2xhc3NOYW1lIGltcF9pbnN0YW5jZSA9ICppbXBfd3JhcHBlcjtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFzc05hbWUqIGltcCA9ICZpbXBfaW5z
dGFuY2U7XG4iKTsKICAgICB9IGVsc2UgewpAQCAtMTQwMSwxOSArMTM5OCwxMiBAQCBFTkQKIH0K
IAogdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfTo6R2V0
UmF3VGVtcGxhdGUoKSB7Ci0gIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gJHtjbGFzc05hbWV9X3Jhd19jYWNoZV87Ci0gIGlmICgke2NsYXNzTmFtZX1fcmF3X2Nh
Y2hlXy5Jc0VtcHR5KCkpIHsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiByZXN1bHQgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6
TmV3KFY4UHJveHk6OmNoZWNrTmV3TGVnYWwpOwotICAgICR7Y2xhc3NOYW1lfV9yYXdfY2FjaGVf
ID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcocmVzdWx0KTsKLSAg
fQorICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NO
YW1lfV9yYXdfY2FjaGVfID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKICAgcmV0dXJuICR7Y2xhc3NO
YW1lfV9yYXdfY2FjaGVfOwogfQogCiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpIHsKLSAgc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX1fY2FjaGVfOwotICBpZiAoJHtjbGFz
c05hbWV9X2NhY2hlXy5Jc0VtcHR5KCkpCi0gICAgJHtjbGFzc05hbWV9X2NhY2hlXyA9IENvbmZp
Z3VyZSR7Y2xhc3NOYW1lfVRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpOworICBzdGF0aWMgdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfV9jYWNoZV8gPSBD
b25maWd1cmUke2NsYXNzTmFtZX1UZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKICAgcmV0dXJu
ICR7Y2xhc3NOYW1lfV9jYWNoZV87CiB9CiAKQEAgLTE2MjAsNyArMTYxMCw3IEBAIHN1YiBHZXRU
eXBlRnJvbVNpZ25hdHVyZQogICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKIAogICAgIG15ICR0
eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOwotICAg
IGlmICgoJHR5cGUgZXEgIkRPTVN0cmluZyIpICYmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJIaW50QXRvbWljIn0pIHsKKyAgICBpZiAoKCR0eXBlIGVxICJET01TdHJpbmciKSAm
JiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkhpbnRBdG9taWMifSB8fCAkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9KSkgewogICAgICAgICAkdHlw
ZSA9ICJBdG9taWNTdHJpbmciOwogICAgIH0KIApAQCAtMTkxMywxNCArMTkwMywxOSBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAgICAgcmV0dXJuICJzdGF0aWNfY2FzdDxTVkdQYWludDo6U1ZHUGFp
bnRUeXBlPigkdmFsdWUtPlRvSW50MzIoKS0+SW50MzJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEgIlNW
R1BhaW50VHlwZSI7CiAKICAgICBpZiAoJHR5cGUgZXEgIkF0b21pY1N0cmluZyIpIHsKLSAgICAg
ICAgcmV0dXJuICJ2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjaygkdmFs
dWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxUb051
bGxTdHJpbmcifTsKKyAgICAgICAgcmV0dXJuICJ0b0F0b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVs
bENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252
ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OwogICAgICAgICByZXR1cm4gInY4VmFsdWVUb0F0b21pY1dl
YkNvcmVTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgcmV0dXJuICJ0b1dlYkNvcmVTdHJp
bmcoJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRPTVVzZXJEYXRhIjsKKyAgICBpZiAoJHR5cGUgZXEg
IkRPTVVzZXJEYXRhIikgeworICAgICAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZyhhcmdzLCAk
MSkiIGlmICR2YWx1ZSA9fiAvYXJnc1xbKFxkKyldLzsKKyAgICAgICAgcmV0dXJuICJ0b1dlYkNv
cmVTdHJpbmcoJHZhbHVlKSI7CisgICAgfQogICAgIGlmICgkdHlwZSBlcSAiRE9NU3RyaW5nIikg
ewogICAgICAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soJHZhbHVlKSIg
aWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxsVG9OdWxsU3Ry
aW5nIn07CiAgICAgICAgIHJldHVybiAidG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5l
ZENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252
ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nIn07CisgICAgICAgIAorICAgICAgICByZXR1
cm4gInRvV2ViQ29yZVN0cmluZyhhcmdzLCAkMSkiIGlmICR2YWx1ZSA9fiAvYXJnc1xbKFxkKyld
LzsKICAgICAgICAgcmV0dXJuICJ0b1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCkBA
IC0xOTQ3LDcgKzE5NDIsNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgICRpbXBsSW5j
bHVkZXN7IlY4Tm9kZS5oIn0gPSAxOwogCiAgICAgICAgICMgRXZlbnRUYXJnZXQgaXMgbm90IGlu
IERPTSBoaWVyYXJjaHksIGJ1dCBhbGwgTm9kZXMgYXJlIEV2ZW50VGFyZ2V0LgotICAgICAgICBy
ZXR1cm4gIlY4Tm9kZTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVy
dERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFs
dWUpKSA6IDAiOworICAgICAgICByZXR1cm4gIlY4Tm9kZTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/
IHY4RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KCR2
YWx1ZSkpIDogMCI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIi
KSB7CkBAIC0xOTYyLDcgKzE5NTcsNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKICAgICAgICAg
IyBQZXJmb3JtIHR5cGUgY2hlY2tzIG9uIHRoZSBwYXJhbWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVk
IE5vZGUgdHlwZSwKICAgICAgICAgIyByZXR1cm4gTlVMTC4KLSAgICAgICAgcmV0dXJuICJWOCR7
dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFw
cGVyVG9Ob2RlPCR7dHlwZX0+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHZhbHVlKSkg
OiAwIjsKKyAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyB2
OERPTVdyYXBwZXJUb05vZGU8JHt0eXBlfT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgk
dmFsdWUpKSA6IDAiOwogICAgIH0gZWxzZSB7CiAgICAgICAgICMgVE9ETzogVGVtcG9yYXJ5IHRv
IGF2b2lkIFdpbmRvdyBuYW1lIGNvbmZsaWN0LgogICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVj
KCR0eXBlKTsKQEAgLTE5ODEsNyArMTk3Niw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAg
ICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24gdGhlIHBhcmFtZXRlciwgaWYgaXQgaXMgZXhw
ZWN0ZWQgTm9kZSB0eXBlLAogICAgICAgICAjIHJldHVybiBOVUxMLgotICAgICAgICByZXR1cm4g
IlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PCR7aW1wbENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4
fSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOworICAgICAgICBy
ZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IHY4RE9NV3JhcHBlclRvPCR7
aW1wbENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOwogICAgIH0KIH0KIApAQCAtMjExNCw4ICsy
MTA5LDggQEAgc3ViIFJldHVybk5hdGl2ZVRvSlNWYWx1ZQogICAgIG15ICRjbGFzc05hbWU9ICJW
OCR0eXBlIjsKIAogICAgIHJldHVybiAicmV0dXJuIHY4OjpEYXRlOjpOZXcoc3RhdGljX2Nhc3Q8
ZG91YmxlPigkdmFsdWUpKSIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7Ci0gICAgcmV0dXJu
ICJyZXR1cm4gJHZhbHVlID8gdjg6OlRydWUoKSA6IHY4OjpGYWxzZSgpIiBpZiAkdHlwZSBlcSAi
Ym9vbGVhbiI7Ci0gICAgcmV0dXJuICJyZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCkiIGlm
ICR0eXBlIGVxICJ2b2lkIjsKKyAgICByZXR1cm4gInJldHVybiB2OEJvb2xlYW4oJHZhbHVlKSIg
aWYgJHR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVybiAicmV0dXJuIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpIiBpZiAkdHlwZSBlcSAidm9pZCI7ICAgICAjIGVxdWl2YWxlbnQgdG8gdjg6OlVu
ZGVmaW5lZCgpCiAKICAgICAjIEZvciBhbGwgdGhlIHR5cGVzIHdoZXJlIHdlIHVzZSAnaW50JyBh
cyB0aGUgcmVwcmVzZW50YXRpb24gdHlwZSwKICAgICAjIHdlIHVzZSBJbnRlZ2VyOjpOZXcgd2hp
Y2ggaGFzIGEgZmFzdCBTbWkgY29udmVyc2lvbiBjaGVjay4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5jcHAJKHJldmlzaW9uIDUwNzU2KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJp
bmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTMgKzEyOCwxMjIgQEAgcHJpdmF0ZToK
ICNlbmRpZgogfTsKIAotZW51bSBFeHRlcm5hbE1vZGUgewotICAgIEV4dGVybmFsaXplLAotICAg
IERvTm90RXh0ZXJuYWxpemUKLX07CisKK3ZvaWQqIHY4RE9NV3JhcHBlclRvTmF0aXZlKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KSB7CisgICAgcmV0dXJuIG9iamVjdC0+R2V0UG9pbnRl
ckZyb21JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKK30K
KyAgICAKK3ZvaWQqIHY4RE9NV3JhcHBlclRvTmF0aXZlKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pIHsKKyAgICByZXR1cm4gaW5mby5Ib2xkZXIoKS0+R2V0UG9pbnRlckZyb21JbnRlcm5h
bEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKK30KKyAgICAKKworU3Ry
aW5nIHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHY4U3RyaW5nVG9X
ZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz46OkNhc3QodmFsdWUpKTsKKyAgICBy
ZXR1cm4gdjhOb25TdHJpbmdWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7Cit9CisKK0F0b21p
Y1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPklzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiB2
OFN0cmluZ1RvQXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0
KHZhbHVlKSk7CisgICAgcmV0dXJuIHY4Tm9uU3RyaW5nVmFsdWVUb0F0b21pY1dlYkNvcmVTdHJp
bmcodmFsdWUpOworfQorCitpbnQgdG9JbnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUs
IGJvb2wmIG9rKQoreworICAgIG9rID0gdHJ1ZTsKKyAgICAKKyAgICAvLyBGYXN0IGNhc2UuICBU
aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBpbnRlZ2VyLgorICAgIGlmICh2YWx1ZS0+SXNJ
bnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUtPkludDMyVmFsdWUoKTsKKyAgICAKKyAgICAv
LyBDYW4gdGhlIHZhbHVlIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlcj8KKyAgICB2ODo6TG9jYWw8
djg6Ok51bWJlcj4gbnVtYmVyT2JqZWN0ID0gdmFsdWUtPlRvTnVtYmVyKCk7CisgICAgaWYgKG51
bWJlck9iamVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIAorICAgIC8vIERvZXMgdGhlIHZhbHVlIGNvbnZlcnQgdG8gbmFu
IG9yIHRvIGFuIGluZmluaXR5PworICAgIGRvdWJsZSBudW1iZXJWYWx1ZSA9IG51bWJlck9iamVj
dC0+VmFsdWUoKTsKKyAgICBpZiAoaXNuYW4obnVtYmVyVmFsdWUpIHx8IGlzaW5mKG51bWJlclZh
bHVlKSkgeworICAgICAgICBvayA9IGZhbHNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgCisgICAgLy8gQ2FuIHRoZSB2YWx1ZSBiZSBjb252ZXJ0ZWQgdG8gYSAzMi1iaXQgaW50ZWdl
cj8KKyAgICB2ODo6TG9jYWw8djg6OkludDMyPiBpbnRWYWx1ZSA9IHZhbHVlLT5Ub0ludDMyKCk7
CisgICAgaWYgKGludFZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICBvayA9IGZhbHNlOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Yg
dGhlIGludDMyIGNvbnZlcnNpb24uCisgICAgcmV0dXJuIGludFZhbHVlLT5WYWx1ZSgpOworfQor
ICAgIAorU3RyaW5nIHRvV2ViQ29yZVN0cmluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBp
bnQgaW5kZXgpIHsKKyAgICByZXR1cm4gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhhcmdzW2luZGV4
XSk7Cit9CisKKyAgICAKK1N0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPklzTnVsbCgpKSAKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5n
KHZhbHVlKTsKK30KKworQXRvbWljU3RyaW5nIHRvQXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxs
Q2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+SXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmcoKTsKKyAgICByZXR1cm4gdjhWYWx1
ZVRvQXRvbWljV2ViQ29yZVN0cmluZyh2YWx1ZSk7Cit9CisKK1N0cmluZyB0b1dlYkNvcmVTdHJp
bmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5kZWZpbmVkKCkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsK
K30KKworYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUp
Cit7CisgICAgcmV0dXJuIHZhbHVlLT5Jc051bGwoKSB8fCB2YWx1ZS0+SXNVbmRlZmluZWQoKTsK
K30KKwordjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gdjhCb29sZWFuKGJvb2wgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHZhbHVlID8gdjg6OlRydWUoKSA6IHY4OjpGYWxzZSgpOworfQorCit2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IHY4VW5kZXRlY3RhYmxlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQor
eworICAgIHJldHVybiB2ODo6U3RyaW5nOjpOZXdVbmRldGVjdGFibGUoZnJvbVdlYkNvcmVTdHJp
bmcoc3RyKSwgc3RyLmxlbmd0aCgpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3Ry
aW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBzdHIuaXNOdWxsKCkg
PyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4odjhTdHJpbmcoc3RyKSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09y
VW5kZWZpbmVkKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBzdHIuaXNOdWxsKCkg
PyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6OlVuZGVmaW5lZCgpKSA6IHY4OjpIYW5kbGU8djg6
OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3Ry
aW5nT3JGYWxzZShjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmlzTnVsbCgp
ID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpGYWxzZSgpKSA6IHY4OjpIYW5kbGU8djg6OlZh
bHVlPih2OFN0cmluZyhzdHIpKTsKK30KKwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlw
ZT4KLXN0YXRpYyBTdHJpbmdUeXBlIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gdjhTdHJpbmcsIEV4dGVybmFsTW9kZSBleHRlcm5hbCkKK1N0cmluZ1R5cGUg
djhTdHJpbmdUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywg
RXh0ZXJuYWxNb2RlIGV4dGVybmFsKQogewogICAgIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSogc3Ry
aW5nUmVzb3VyY2UgPSBXZWJDb3JlU3RyaW5nUmVzb3VyY2U6OnRvU3RyaW5nUmVzb3VyY2UodjhT
dHJpbmcpOwogICAgIGlmIChzdHJpbmdSZXNvdXJjZSkKQEAgLTE2OSwxNiArMjc4LDYgQEAgc3Rh
dGljIFN0cmluZ1R5cGUgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbgogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVN0cmluZyB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+IHY4U3RyaW5nKQotewotICAgIHJldHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJp
bmc+KHY4U3RyaW5nLCBFeHRlcm5hbGl6ZSk7Ci19Ci0KLUF0b21pY1N0cmluZyB2OFN0cmluZ1Rv
QXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKQotewot
ICAgIHJldHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxBdG9taWNTdHJpbmc+KHY4U3RyaW5n
LCBFeHRlcm5hbGl6ZSk7Ci19Ci0KIFN0cmluZyB2OE5vblN0cmluZ1ZhbHVlVG9XZWJDb3JlU3Ry
aW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKCFvYmplY3Qt
PklzU3RyaW5nKCkpOwpAQCAtMjU0LDEzICszNTMsMTMgQEAgc3RhdGljIHZvaWQgY2FjaGVkU3Ry
aW5nQ2FsbGJhY2sodjg6OlBlcgogCiB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkK
KyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsKKyAgICBpZiAoIXN0
cmluZ0ltcGwgfHwgIXN0cmluZ0ltcGwtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gdjg6OlN0
cmluZzo6RW1wdHkoKTsKIAogICAgIGlmICghc3RyaW5nSW1wbENhY2hlRW5hYmxlZCkKICAgICAg
ICAgcmV0dXJuIG1ha2VFeHRlcm5hbFN0cmluZyhzdHJpbmcpOwogCi0gICAgU3RyaW5nSW1wbCog
c3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CiAgICAgU3RyaW5nQ2FjaGUmIHN0cmluZ0NhY2hl
ID0gZ2V0U3RyaW5nQ2FjaGUoKTsKICAgICB2ODo6U3RyaW5nKiBjYWNoZWRWOFN0cmluZyA9IHN0
cmluZ0NhY2hlLmdldChzdHJpbmdJbXBsKTsKICAgICBpZiAoY2FjaGVkVjhTdHJpbmcpCkBAIC0y
ODAsNSArMzc5LDEyIEBAIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKGMK
IAogICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CisgICAgCit2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKQoreworICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHJlc3VsdCA9IHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhQcm94eTo6Y2hlY2tOZXdMZWdhbCk7CisgICAgcmV0
dXJuIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7Cit9
ICAgICAgICAKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5oCShyZXZpc2lvbiA1MDc1NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDM3ICszNCwxMDcgQEAKICNpbmNsdWRlICJBdG9taWNT
dHJpbmcuaCIKICNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEluZGV4LmgiCiAK
ICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3Mg
RXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBFdmVudFRhcmdldDsKKyAgICAKKyAgICAvLyBBIGhl
bHBlciBmdW5jdGlvbiBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRlciBmcm9tIGEgRE9NIHdy
YXBwZXIKKyAgICAvLyBhbmQgY2FzdCB0byB0aGUgc3BlY2lmaWVkIHR5cGUuCisgICAgdm9pZCog
djhET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAgCisgICAg
dGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVyVG8odjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXli
ZURPTVdyYXBwZXIob2JqZWN0KSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEMq
Pih2OERPTVdyYXBwZXJUb05hdGl2ZShvYmplY3QpKTsKKyAgICB9CisgICAgdGVtcGxhdGUgPGNs
YXNzIEM+CisgICAgQyogdjhET01XcmFwcGVyVG9Ob2RlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFw
cGVyKG9iamVjdCkpOworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlw
ZShvYmplY3QpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEMqPih2OERPTVdyYXBwZXJUb05hdGl2ZShvYmplY3QpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCogdjhET01XcmFwcGVyVG9OYXRpdmUoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYp
OworICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIEMqIHY4RE9NV3JhcHBlclRvKGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBl
cjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Qyo+KHY4RE9NV3JhcHBlclRvTmF0aXZlKGluZm8pKTsKKyAgICB9CisgICAg
dGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVyVG9Ob2RlKGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pIHsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6ZG9tV3Jh
cHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Qyo+KHY4RE9NV3JhcHBlclRvTmF0aXZlKGluZm8pKTsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVy
VG8oVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgLy8gTmF0aXZlIGV2ZW50IGxpc3RlbmVyIGlzIHBl
ciBmcmFtZSwgaXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBnZW5lcmljIGZ1bmN0aW9uLgor
ICAgICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UTElTVEVORVIpOworICAg
ICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsK
KyAgICAgICAgCisjaWZuZGVmIE5ERUJVRworICAgICAgICBjb25zdCBib29sIHR5cGVJc1ZhbGlk
ID0KKyNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICh0eXBlICE9IFY4Q2xhc3NJbmRleDo6
VFlQRSkgJiYKKyAgICAgICAgRE9NX05PREVfVFlQRVMoTUFLRV9DQVNFKQorI2lmIEVOQUJMRShT
VkcpCisgICAgICAgIFNWR19OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyNlbmRpZgorI3VuZGVmIE1B
S0VfQ0FTRQorICAgICAgICB0cnVlOworICAgICAgICBBU1NFUlQodHlwZUlzVmFsaWQpOworI2Vu
ZGlmCisgICAgICAgIAorICAgICAgICByZXR1cm4gdjhET01XcmFwcGVyVG88Qz4ob2JqZWN0KTsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVy
VG8oVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgcmV0dXJuIHY4RE9NV3Jh
cHBlclRvPEM+KHR5cGUsIGluZm8uSG9sZGVyKCkpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Qyo+KHY4RE9NV3JhcHBlclRvTmF0aXZlKGluZm8pKTsKKyNlbmRpZgor
ICAgIH0KKworICAgIAorICAgIGVudW0gRXh0ZXJuYWxNb2RlIHsKKyAgICAgICAgRXh0ZXJuYWxp
emUsCisgICAgICAgIERvTm90RXh0ZXJuYWxpemUKKyAgICB9OworICAgIAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBTdHJpbmdUeXBlPgorICAgIFN0cmluZ1R5cGUgdjhTdHJpbmdUb1dlYkNvcmVT
dHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgRXh0ZXJuYWxNb2RlIGV4dGVy
bmFsKTsKIAogICAgIC8vIENvbnZlcnQgdjggdHlwZXMgdG8gYSBXZWJDb3JlOjpTdHJpbmcuIElm
IHRoZSBWOCBzdHJpbmcgaXMgbm90IGFscmVhZHkKICAgICAvLyBhbiBleHRlcm5hbCBzdHJpbmcg
dGhlbiBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGV4dGVybmFsIHN0cmluZyBhdCB0aGlzCiAg
ICAgLy8gcG9pbnQgdG8gYXZvaWQgcmVwZWF0ZWQgY29udmVyc2lvbnMuCi0gICAgU3RyaW5nIHY4
U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4pOwotICAgIFN0cmlu
ZyB2OE5vblN0cmluZ1ZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7
Ci0gICAgaW5saW5lIFN0cmluZyB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSkKKyAgICBpbmxpbmUgU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5n
KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcpCiAgICAgewotICAgICAgICBpZiAodmFs
dWUtPklzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJp
bmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdCh2YWx1ZSkpOwotICAgICAgICByZXR1cm4g
djhOb25TdHJpbmdWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgICAgIHJldHVybiB2
OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJpbmc+KHY4U3RyaW5nLCBFeHRlcm5hbGl6ZSk7CiAg
ICAgfQorICAgIFN0cmluZyB2OE5vblN0cmluZ1ZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5k
bGU8djg6OlZhbHVlPik7CisgICAgU3RyaW5nIHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAogICAgIC8vIENvbnZlcnQgdjggdHlwZXMgdG8gYSBX
ZWJDb3JlOjpBdG9taWNTdHJpbmcuCi0gICAgQXRvbWljU3RyaW5nIHY4U3RyaW5nVG9BdG9taWNX
ZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4pOwotICAgIEF0b21pY1N0cmluZyB2
OE5vblN0cmluZ1ZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVl
Pik7Ci0gICAgaW5saW5lIEF0b21pY1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5n
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+
SXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiB2OFN0cmluZ1RvQXRvbWljV2ViQ29yZVN0
cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KHZhbHVlKSk7Ci0gICAgICAgIHJldHVy
biB2OE5vblN0cmluZ1ZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHZhbHVlKTsKLSAgICB9Ci0K
LSAgICBpbmxpbmUgY29uc3QgU3RyaW5nJiB0b1N0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
KyAgICBpbmxpbmUgQXRvbWljU3RyaW5nIHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gc3Ry
aW5nOworICAgICAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmc8QXRvbWljU3RyaW5n
Pih2OFN0cmluZywgRXh0ZXJuYWxpemUpOwogICAgIH0KKyAgICBBdG9taWNTdHJpbmcgdjhOb25T
dHJpbmdWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwor
ICAgIEF0b21pY1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSk7CiAKICAgICAvLyBSZXR1cm4gYSBWOCBleHRlcm5hbCBzdHJpbmcg
dGhhdCBzaGFyZXMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdpdGggdGhlIGdpdmVuCiAgICAgLy8g
V2ViQ29yZSBzdHJpbmcuIFRoZSByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtIGlzIHVzZWQg
dG8ga2VlcCB0aGUKQEAgLTg0LDM4ICsxNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAvLyBDb252ZXJ0IGEgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdlci4gIFRoZSBjb252ZXJzaW9u
IGZhaWxzIGlmIHRoZQogICAgIC8vIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50
ZWdlciBvciBjb252ZXJ0cyB0byBuYW4gb3IgdG8gYW4gaW5maW5pdHkuCi0gICAgaW5saW5lIGlu
dCB0b0ludDMyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCi0gICAgewot
ICAgICAgICBvayA9IHRydWU7Ci0KLSAgICAgICAgLy8gRmFzdCBjYXNlLiAgVGhlIHZhbHVlIGlz
IGFscmVhZHkgYSAzMi1iaXQgaW50ZWdlci4KLSAgICAgICAgaWYgKHZhbHVlLT5Jc0ludDMyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUtPkludDMyVmFsdWUoKTsKLQotICAgICAgICAvLyBD
YW4gdGhlIHZhbHVlIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlcj8KLSAgICAgICAgdjg6OkxvY2Fs
PHY4OjpOdW1iZXI+IG51bWJlck9iamVjdCA9IHZhbHVlLT5Ub051bWJlcigpOwotICAgICAgICBp
ZiAobnVtYmVyT2JqZWN0LklzRW1wdHkoKSkgewotICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRG9lcyB0aGUgdmFs
dWUgY29udmVydCB0byBuYW4gb3IgdG8gYW4gaW5maW5pdHk/Ci0gICAgICAgIGRvdWJsZSBudW1i
ZXJWYWx1ZSA9IG51bWJlck9iamVjdC0+VmFsdWUoKTsKLSAgICAgICAgaWYgKGlzbmFuKG51bWJl
clZhbHVlKSB8fCBpc2luZihudW1iZXJWYWx1ZSkpIHsKLSAgICAgICAgICAgIG9rID0gZmFsc2U7
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENhbiB0aGUg
dmFsdWUgYmUgY29udmVydGVkIHRvIGEgMzItYml0IGludGVnZXI/Ci0gICAgICAgIHY4OjpMb2Nh
bDx2ODo6SW50MzI+IGludFZhbHVlID0gdmFsdWUtPlRvSW50MzIoKTsKLSAgICAgICAgaWYgKGlu
dFZhbHVlLklzRW1wdHkoKSkgewotICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Yg
dGhlIGludDMyIGNvbnZlcnNpb24uCi0gICAgICAgIHJldHVybiBpbnRWYWx1ZS0+VmFsdWUoKTsK
LSAgICB9CisgICAgaW50IHRvSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBib29s
JiBvayk7CiAKICAgICAvLyBDb252ZXJ0IGEgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdlciBhc3N1
bWluZyB0aGUgY29udmVyc2lvbiBjYW5ub3QgZmFpbC4KICAgICBpbmxpbmUgaW50IHRvSW50MzIo
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQpAQCAtMTM0LDYgKzE3Myw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB7CiAgICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5n
KG9iamVjdCk7CiAgICAgfQorICAgIAorICAgIFN0cmluZyB0b1dlYkNvcmVTdHJpbmcoY29uc3Qg
djg6OkFyZ3VtZW50cyYsIGludCBpbmRleCk7CiAKICAgICAvLyBUaGUgc3RyaW5nIHJldHVybmVk
IGJ5IHRoaXMgZnVuY3Rpb24gaXMgc3RpbGwgb3duZWQgYnkgdGhlIGFyZ3VtZW50CiAgICAgLy8g
YW5kIHdpbGwgYmUgZGVhbGxvY2F0ZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgZGVhbGxvY2F0ZWQu
CkBAIC0xNDIsNTYgKzE4MywyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc3RyLmNoYXJhY3RlcnMoKSk7CiAg
ICAgfQogCi0gICAgaW5saW5lIGJvb2wgaXNVbmRlZmluZWRPck51bGwodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5Jc051bGwoKSB8fCB2
YWx1ZS0+SXNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwogCi0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6
OkJvb2xlYW4+IHY4Qm9vbGVhbihib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlID8gdjg6OlRydWUoKSA6IHY4OjpGYWxzZSgpOwotICAgIH0KKyAgICB2ODo6SGFuZGxlPHY4
OjpCb29sZWFuPiB2OEJvb2xlYW4oYm9vbCB2YWx1ZSk7CiAKLSAgICBpbmxpbmUgU3RyaW5nIHRv
V2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgCi0gICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsK
LSAgICB9CisgICAgU3RyaW5nIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAotICAgIGlubGluZSBBdG9taWNTdHJpbmcgdjhWYWx1ZVRv
QXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBBdG9taWNTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHY4VmFsdWVUb0F0b21pY1dlYkNv
cmVTdHJpbmcodmFsdWUpOwotICAgIH0KKyAgICBBdG9taWNTdHJpbmcgdG9BdG9taWNXZWJDb3Jl
U3RyaW5nV2l0aE51bGxDaGVjayh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwogCi0gICAg
aW5saW5lIFN0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2sodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5Jc051
bGwoKSB8fCB2YWx1ZS0+SXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7Ci0gICAgfQorICAgIFN0
cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2sodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKTsKICAKLSAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2
OFVuZGV0ZWN0YWJsZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB2ODo6U3RyaW5nOjpOZXdVbmRldGVjdGFibGUoZnJvbVdlYkNvcmVTdHJpbmcoc3RyKSwg
c3RyLmxlbmd0aCgpKTsKLSAgICB9CisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFVuZGV0
ZWN0YWJsZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cik7CiAKLSAgICBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6TnVs
bCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0cmluZyhzdHIpKTsKLSAgICB9CisgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxsKGNvbnN0IFN0cmluZyYgc3RyKTsK
IAotICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPclVuZGVmaW5lZChj
b25zdCBTdHJpbmcmIHN0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6OlVuZGVmaW5lZCgpKSA6IHY4OjpIYW5kbGU8djg6OlZh
bHVlPih2OFN0cmluZyhzdHIpKTsKLSAgICB9CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4
U3RyaW5nT3JVbmRlZmluZWQoY29uc3QgU3RyaW5nJiBzdHIpOworCisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHY4U3RyaW5nT3JGYWxzZShjb25zdCBTdHJpbmcmIHN0cik7CisgICAgCisgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNyZWF0ZVJhd1RlbXBsYXRlKCk7
CiAKLSAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JGYWxzZShjb25z
dCBTdHJpbmcmIHN0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4odjg6OkZhbHNlKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4
U3RyaW5nKHN0cikpOwotICAgIH0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IFY4QmluZGluZ19oCg==
</data>
<flag name="review"
          id="24669"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>