<?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>105288</bug_id>
          
          <creation_ts>2012-12-18 07:12:57 -0800</creation_ts>
          <short_desc>[EFL] ImageDiff does not build on WebKit2 only builds</short_desc>
          <delta_ts>2012-12-18 07:50:36 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Thiago Marcos P. Santos">tmpsantos</reporter>
          <assigned_to name="Thiago Marcos P. Santos">tmpsantos</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>793607</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-12-18 07:12:57 -0800</bug_when>
    <thetext>The tool lives inside DumpRenderTree (although it doesn&apos;t depend on it). It also link with tons of unnecessary libraries for no apparent reason.

We should move it to a neutral place and enable it by default regardless of what version of the WebKit API you are building.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793610</commentid>
    <comment_count>1</comment_count>
      <attachid>179936</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-12-18 07:16:35 -0800</bug_when>
    <thetext>Created attachment 179936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793626</commentid>
    <comment_count>2</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2012-12-18 07:34:14 -0800</bug_when>
    <thetext>I would move the ImageDiff directory at the same level as DumpRenderTree - e.g. Tools/ImageDiff(/efl). We should probably check with other ports for their preference for the location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793635</commentid>
    <comment_count>3</comment_count>
      <attachid>179936</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 07:50:31 -0800</bug_when>
    <thetext>Comment on attachment 179936
Patch

Clearing flags on attachment: 179936

Committed r138019: &lt;http://trac.webkit.org/changeset/138019&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793636</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 07:50:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179936</attachid>
            <date>2012-12-18 07:16:35 -0800</date>
            <delta_ts>2012-12-18 07:50:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105288-20121218171826.patch</filename>
            <type>text/plain</type>
            <size>30207</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDA1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2MzZDdjMDQ1ODY0YjY3NjEyNWE0OGFhZDI5N2RjNzAy
MWNmYWQ0Ni4uMTFlYzQ3MmY1ODFhMzM0MjAxNzE5YzI0OTJjMDRlZWQ2Njk0N2VmZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIx
IEBACisyMDEyLTEyLTE4ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NA
aW50ZWwuY29tPgorCisgICAgICAgIFtFRkxdIEltYWdlRGlmZiBkb2VzIG5vdCBidWlsZCBvbiBX
ZWJLaXQyIG9ubHkgYnVpbGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDUyODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb3ZlZCBJbWFnZURpZmYgdG8gdGhlIGVmbC8gZm9sZGVyIGluc2lkZSBUb29s
cy8gKHNvIHdlIGRvbid0IHBvbGx1dGUKKyAgICAgICAgdGhlIGZvbGRlciB3aXRoIHRoaW5ncyB3
aGljaCBhcmUgRUZMLXNwZWNpZmljLgorCisgICAgICAgIEltYWdlRGlmZiB3aWxsIGJlIGJ1aWx0
IGJ5IGRlZmF1bHQgbm93IHJlZ2FyZGxlc3Mgb2YgV2ViS2l0IEFQSSBmbGF2b3IKKyAgICAgICAg
eW91IGNob29zZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBlZmwvSW1hZ2VEaWZmL0NN
YWtlTGlzdHMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZmwvSW1hZ2VEaWZmL0ltYWdlRGlmZi5j
cHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSW1hZ2VEaWZmLmNwcC4K
KwogMjAxMi0xMi0xOCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIG1vdmUgd2ViaW50ZW50IHJlbGF0ZWQgbWV0aG9kcyB0byBUZXN0
UnVubmVyIGxpYnJhcnkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMv
Q01ha2VMaXN0cy50eHQKaW5kZXggZTUzOTZhM2JiODA1Y2U2NjNjYzBmZmZiZGUwMDQ1NzIxMTIy
NWVkYi4uZGJmMTllZTZkMTNjZmM0Y2FiM2M3NDA4ZjRhYzM4YWQ5NTMzN2E4YyAxMDA2NDQKLS0t
IGEvVG9vbHMvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvQ01ha2VMaXN0cy50eHQKQEAgLTMs
NiArMyw3IEBAIGlmIChFTkFCTEVfV0VCS0lUMikKIGVuZGlmICgpCiAKIGlmICgiJHtQT1JUfSIg
U1RSRVFVQUwgIkVmbCIpCisgICAgYWRkX3N1YmRpcmVjdG9yeShlZmwvSW1hZ2VEaWZmKQogICAg
IGFkZF9zdWJkaXJlY3RvcnkoRVdlYkxhdW5jaGVyL0NvbnRyb2xUaGVtZSkKIAogICAgIGlmIChF
TkFCTEVfV0VCS0lUKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtl
TGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CmluZGV4
IDY2OGI0NDI3ZjU5MzhmYzY2ZGY0ODgyZDQwYTViMTA1YjZlOWI1NzAuLmQyMzZkMGQ1OTdkOTdl
MzQxZDg3ODY5NmE5MjBjY2UxY2IwMzNlYWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01h
a2VMaXN0cy50eHQKQEAgLTIxLDEwICsyMSw2IEBAIHNldChEdW1wUmVuZGVyVHJlZV9TT1VSQ0VT
CiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9Xb3JrUXVldWVJdGVtRWZsLmNw
cAogKQogCi1zZXQoSW1hZ2VEaWZmX1NPVVJDRVMKLSAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRl
clRyZWUvZWZsL0ltYWdlRGlmZi5jcHAKLSkKLQogc2V0KER1bXBSZW5kZXJUcmVlX0xJQlJBUklF
UwogICAgICR7SmF2YVNjcmlwdENvcmVfTElCUkFSWV9OQU1FfQogICAgICR7V2ViQ29yZVRlc3RT
dXBwb3J0X0xJQlJBUllfTkFNRX0KQEAgLTEyNCw3ICsxMjAsMyBAQCBpbmNsdWRlX2RpcmVjdG9y
aWVzKCR7RHVtcFJlbmRlclRyZWVfSU5DTFVERV9ESVJFQ1RPUklFU30pCiBhZGRfZXhlY3V0YWJs
ZShEdW1wUmVuZGVyVHJlZSAke0R1bXBSZW5kZXJUcmVlX1NPVVJDRVN9KQogdGFyZ2V0X2xpbmtf
bGlicmFyaWVzKER1bXBSZW5kZXJUcmVlICR7RHVtcFJlbmRlclRyZWVfTElCUkFSSUVTfSkKIHNl
dF90YXJnZXRfcHJvcGVydGllcyhEdW1wUmVuZGVyVHJlZSBQUk9QRVJUSUVTIEZPTERFUiAiVG9v
bHMiKQotCi1hZGRfZXhlY3V0YWJsZShJbWFnZURpZmYgJHtJbWFnZURpZmZfU09VUkNFU30pCi10
YXJnZXRfbGlua19saWJyYXJpZXMoSW1hZ2VEaWZmICR7RHVtcFJlbmRlclRyZWVfTElCUkFSSUVT
fSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhJbWFnZURpZmYgUFJPUEVSVElFUyBGT0xERVIgIlRv
b2xzIikKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9JbWFnZURpZmYuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0ltYWdlRGlmZi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDEyOWI2Y2E1N2M4NTQyMzY3MjgwYWFmNDhlZGUyOTM4OTk3YWU1ZWEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0ltYWdlRGlmZi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNjggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQ29weXJp
Z2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUg
PEVjb3JlLmg+Ci0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEV2YXMuaD4KLSNp
bmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgot
I2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0
YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNs
dWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9lZmwvUmVmUHRyRWZsLmg+Ci0KLWVudW0gUGl4ZWxDb21wb25lbnQgewotICAgIFJl
ZCwKLSAgICBHcmVlbiwKLSAgICBCbHVlLAotICAgIEFscGhhCi19OwotCi1zdGF0aWMgT3duUHRy
PEVjb3JlX0V2YXM+IGdFY29yZUV2YXM7Ci1zdGF0aWMgZG91YmxlIGdUb2xlcmFuY2UgPSAwOwot
Ci1zdGF0aWMgdm9pZCBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogZXJyb3JNZXNz
YWdlKTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIqIHBpeGVsRnJvbUltYWdlRGF0YSh1bnNpZ25l
ZCBjaGFyKiBpbWFnZURhdGEsIGludCByb3dTdHJpZGUsIGludCB4LCBpbnQgeSkKLXsKLSAgICBy
ZXR1cm4gaW1hZ2VEYXRhICsgKHkgKiByb3dTdHJpZGUpICsgKHggPDwgMik7Ci19Ci0KLXN0YXRp
YyBFdmFzX09iamVjdCogZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIoRXZhcyog
ZXZhcywgdW5zaWduZWQgY2hhciogYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0g
ICAgRXZhc19PYmplY3QqIGltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfZmlsbGVkX2FkZChldmFz
KTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoImNvdWxk
IG5vdCBjcmVhdGUgZGlmZmVyZW5jZSBpbWFnZSIpOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
c2l6ZV9zZXQoaW1hZ2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2Nv
bG9yc3BhY2Vfc2V0KGltYWdlLCBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpOwotCi0gICAgdW5z
aWduZWQgY2hhciogZGlmZlBpeGVscyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihldmFz
X29iamVjdF9pbWFnZV9kYXRhX2dldChpbWFnZSwgRUlOQV9UUlVFKSk7Ci0gICAgY29uc3QgaW50
IHJvd1N0cmlkZSA9IGV2YXNfb2JqZWN0X2ltYWdlX3N0cmlkZV9nZXQoaW1hZ2UpOwotICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkaWZmUGl4ZWwg
PSBwaXhlbEZyb21JbWFnZURhdGEoZGlmZlBpeGVscywgcm93U3RyaWRlLCB4LCB5KTsKLSAgICAg
ICAgICAgIGRpZmZQaXhlbFtSZWRdID0gZGlmZlBpeGVsW0dyZWVuXSA9IGRpZmZQaXhlbFtCbHVl
XSA9ICpidWZmZXIrKzsKLSAgICAgICAgICAgIGRpZmZQaXhlbFtBbHBoYV0gPSAweGZmOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoaW1hZ2UsIGRp
ZmZQaXhlbHMpOwotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgZmxvYXQgY29tcHV0
ZURpc3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyh1bnNpZ25lZCBjaGFyIGFjdHVhbENvbXBv
bmVudCwgdW5zaWduZWQgY2hhciBiYXNlQ29tcG9uZW50KQotewotICAgIHJldHVybiAoYWN0dWFs
Q29tcG9uZW50IC0gYmFzZUNvbXBvbmVudCkgLyBzdGQ6Om1heDxmbG9hdD4oMjU1IC0gYmFzZUNv
bXBvbmVudCwgYmFzZUNvbXBvbmVudCk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBjb21wdXRlRGlzdGFu
Y2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVsLCB1bnNp
Z25lZCBjaGFyKiBiYXNlUGl4ZWwsIFBpeGVsQ29tcG9uZW50IGNvbXBvbmVudCkKLXsKLSAgICBy
ZXR1cm4gY29tcHV0ZURpc3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyhhY3R1YWxQaXhlbFtj
b21wb25lbnRdLCBiYXNlUGl4ZWxbY29tcG9uZW50XSk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBjYWxj
dWxhdGVQaXhlbERpZmZlcmVuY2UodW5zaWduZWQgY2hhciogYmFzZVBpeGVsLCB1bnNpZ25lZCBj
aGFyKiBhY3R1YWxQaXhlbCkKLXsKLSAgICBjb25zdCBmbG9hdCByZWQgPSBjb21wdXRlRGlzdGFu
Y2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKGFjdHVhbFBpeGVsLCBiYXNlUGl4ZWwsIFJlZCk7Ci0g
ICAgY29uc3QgZmxvYXQgZ3JlZW4gPSBjb21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25l
bnRzKGFjdHVhbFBpeGVsLCBiYXNlUGl4ZWwsIEdyZWVuKTsKLSAgICBjb25zdCBmbG9hdCBibHVl
ID0gY29tcHV0ZURpc3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyhhY3R1YWxQaXhlbCwgYmFz
ZVBpeGVsLCBCbHVlKTsKLSAgICBjb25zdCBmbG9hdCBhbHBoYSA9IGNvbXB1dGVEaXN0YW5jZUJl
dHdlZW5QaXhlbENvbXBvbmVudHMoYWN0dWFsUGl4ZWwsIGJhc2VQaXhlbCwgQWxwaGEpOwotICAg
IHJldHVybiBzcXJ0ZihyZWQgKiByZWQgKyBncmVlbiAqIGdyZWVuICsgYmx1ZSAqIGJsdWUgKyBh
bHBoYSAqIGFscGhhKSAvIDIuMGY7Ci19Ci0KLXN0YXRpYyBmbG9hdCBjYWxjdWxhdGVEaWZmZXJl
bmNlKEV2YXNfT2JqZWN0KiBiYXNlbGluZUltYWdlLCBFdmFzX09iamVjdCogYWN0dWFsSW1hZ2Us
IFJlZlB0cjxFdmFzX09iamVjdD4mIGRpZmZlcmVuY2VJbWFnZSkKLXsKLSAgICBpbnQgd2lkdGgs
IGhlaWdodCwgYmFzZWxpbmVXaWR0aCwgYmFzZWxpbmVIZWlnaHQ7Ci0gICAgZXZhc19vYmplY3Rf
aW1hZ2Vfc2l6ZV9nZXQoYWN0dWFsSW1hZ2UsICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgZXZhc19v
YmplY3RfaW1hZ2Vfc2l6ZV9nZXQoYmFzZWxpbmVJbWFnZSwgJmJhc2VsaW5lV2lkdGgsICZiYXNl
bGluZUhlaWdodCk7Ci0KLSAgICBpZiAod2lkdGggIT0gYmFzZWxpbmVXaWR0aCB8fCBoZWlnaHQg
IT0gYmFzZWxpbmVIZWlnaHQpIHsKLSAgICAgICAgcHJpbnRmKCJFcnJvciwgdGVzdCBhbmQgcmVm
ZXJlbmNlIGltYWdlIGhhdmUgZGlmZmVyZW50IHNpemVzLlxuIik7Ci0gICAgICAgIHJldHVybiAx
MDA7IC8vIENvbXBsZXRlbHkgZGlmZmVyZW50LgotICAgIH0KLQotICAgIE93bkFycmF5UHRyPHVu
c2lnbmVkIGNoYXI+IGRpZmZCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFy
W3dpZHRoICogaGVpZ2h0XSk7Ci0gICAgaWYgKCFkaWZmQnVmZmVyKQotICAgICAgICBhYm9ydFdp
dGhFcnJvck1lc3NhZ2UoImNvdWxkIG5vdCBjcmVhdGUgZGlmZmVyZW5jZSBidWZmZXIiKTsKLQot
ICAgIGNvbnN0IGludCBhY3R1YWxSb3dTdHJpZGUgPSBldmFzX29iamVjdF9pbWFnZV9zdHJpZGVf
Z2V0KGFjdHVhbEltYWdlKTsKLSAgICBjb25zdCBpbnQgYmFzZVJvd1N0cmlkZSA9IGV2YXNfb2Jq
ZWN0X2ltYWdlX3N0cmlkZV9nZXQoYmFzZWxpbmVJbWFnZSk7Ci0gICAgdW5zaWduZWQgbnVtYmVy
T2ZEaWZmZXJlbnRQaXhlbHMgPSAwOwotICAgIGZsb2F0IHRvdGFsRGlzdGFuY2UgPSAwOwotICAg
IGZsb2F0IG1heERpc3RhbmNlID0gMDsKLSAgICB1bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbHMg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQo
YWN0dWFsSW1hZ2UsIEVJTkFfRkFMU0UpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWxz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0
KGJhc2VsaW5lSW1hZ2UsIEVJTkFfRkFMU0UpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBjdXJyZW50
RGlmZlBpeGVsID0gZGlmZkJ1ZmZlci5nZXQoKTsKLQotICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykgewotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbCA9IHBpeGVsRnJvbUltYWdl
RGF0YShhY3R1YWxQaXhlbHMsIGFjdHVhbFJvd1N0cmlkZSwgeCwgeSk7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWwgPSBwaXhlbEZyb21JbWFnZURhdGEoYmFzZVBpeGVscywg
YmFzZVJvd1N0cmlkZSwgeCwgeSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpc3RhbmNl
ID0gY2FsY3VsYXRlUGl4ZWxEaWZmZXJlbmNlKGJhc2VQaXhlbCwgYWN0dWFsUGl4ZWwpOwotICAg
ICAgICAgICAgKmN1cnJlbnREaWZmUGl4ZWwrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGRpc3RhbmNlICogMjU1LjBmKTsKLQotICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IDEuMGYg
LyAyNTUuMGYpIHsKLSAgICAgICAgICAgICAgICArK251bWJlck9mRGlmZmVyZW50UGl4ZWxzOwot
ICAgICAgICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZGlzdGFuY2U7Ci0gICAgICAgICAgICAg
ICAgbWF4RGlzdGFuY2UgPSBzdGQ6Om1heDxmbG9hdD4obWF4RGlzdGFuY2UsIGRpc3RhbmNlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFdoZW4gdXNpbmcgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoKSwgYSBjb21wbGVtZW50YXJ5IGV2YXNfb2JqZWN0X2Rh
dGFfc2V0KCkgbXVzdCBiZQotICAgIC8vIGlzc3VlZCB0byBiYWxhbmNlIHRoZSByZWZlcmVuY2Ug
Y291bnQsIGV2ZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVuIGNoYW5nZWQuCi0gICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV9zZXQoYmFzZWxpbmVJbWFnZSwgYmFzZVBpeGVscyk7Ci0gICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoYWN0dWFsSW1hZ2UsIGFjdHVhbFBpeGVscyk7Ci0KLSAg
ICAvLyBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGFzIGEgcGVyY2VudGFnZSBjb21iaW5pbmcgYm90
aCB0aGUgbnVtYmVyIG9mCi0gICAgLy8gZGlmZmVyZW50IHBpeGVscyBhbmQgdGhlaXIgZGlmZmVy
ZW5jZSBhbW91bnQgaS5lLiB0aGUgYXZlcmFnZSBkaXN0YW5jZQotICAgIC8vIG92ZXIgdGhlIGVu
dGlyZSBpbWFnZQotICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAwOwotICAgIGlmIChudW1iZXJPZkRp
ZmZlcmVudFBpeGVscykKLSAgICAgICAgZGlmZmVyZW5jZSA9IDEwMC4wZiAqIHRvdGFsRGlzdGFu
Y2UgLyAoaGVpZ2h0ICogd2lkdGgpOwotICAgIGlmIChkaWZmZXJlbmNlIDw9IGdUb2xlcmFuY2Up
Ci0gICAgICAgIGRpZmZlcmVuY2UgPSAwOwotICAgIGVsc2UgewotICAgICAgICBkaWZmZXJlbmNl
ID0gcm91bmRmKGRpZmZlcmVuY2UgKiAxMDAuMGYpIC8gMTAwLjBmOwotICAgICAgICBkaWZmZXJl
bmNlID0gc3RkOjptYXgoZGlmZmVyZW5jZSwgMC4wMWYpOyAvLyByb3VuZCB0byAyIGRlY2ltYWwg
cGxhY2VzCi0KLSAgICAgICAgZGlmZmVyZW5jZUltYWdlID0gYWRvcHRSZWYoZGlmZmVyZW5jZUlt
YWdlRnJvbURpZmZlcmVuY2VCdWZmZXIoZXZhc19vYmplY3RfZXZhc19nZXQoYmFzZWxpbmVJbWFn
ZSksIGRpZmZCdWZmZXIuZ2V0KCksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZGlmZmVyZW5jZTsKLX0KLQotc3RhdGljIGludCBnZXRUZW1wb3JhcnlGaWxlKGNoYXIgKmZp
bGVOYW1lLCBzaXplX3QgZmlsZU5hbWVMZW5ndGgpCi17Ci0gICAgY2hhciogdGVtcERpcmVjdG9y
eSA9IGdldGVudigiVE1QRElSIik7Ci0gICAgaWYgKCF0ZW1wRGlyZWN0b3J5KQotICAgICAgICB0
ZW1wRGlyZWN0b3J5ID0gZ2V0ZW52KCJURU1QIik7Ci0KLSAgICBpZiAodGVtcERpcmVjdG9yeSkK
LSAgICAgICAgc25wcmludGYoZmlsZU5hbWUsIGZpbGVOYW1lTGVuZ3RoLCAiJXMvSW1hZ2VEaWZm
WFhYWFhYLnBuZyIsIHRlbXBEaXJlY3RvcnkpOwotICAgIGVsc2UgewotI2lmIF9fbGludXhfXwot
ICAgICAgICBzdHJjcHkoZmlsZU5hbWUsICIvZGV2L3NobS9JbWFnZURpZmZYWFhYWFgucG5nIik7
Ci0gICAgICAgIGNvbnN0IGludCBmaWxlRGVzY3JpcHRvciA9IG1rc3RlbXBzKGZpbGVOYW1lLCBz
aXplb2YoIi5wbmciKSAtIDEpOwotICAgICAgICBpZiAoZmlsZURlc2NyaXB0b3IgPj0gMCkKLSAg
ICAgICAgICAgIHJldHVybiBmaWxlRGVzY3JpcHRvcjsKLSNlbmRpZiAvLyBfX2xpbnV4X18KLQot
ICAgICAgICBzdHJjcHkoZmlsZU5hbWUsICJJbWFnZURpZmZYWFhYWFgucG5nIik7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1rc3RlbXBzKGZpbGVOYW1lLCBzaXplb2YoIi5wbmciKSAtIDEpOwotfQot
Ci1zdGF0aWMgdm9pZCBwcmludEltYWdlKEV2YXNfT2JqZWN0KiBpbWFnZSkKLXsKLSAgICBjaGFy
IGZpbGVOYW1lW1BBVEhfTUFYXTsKLQotICAgIGNvbnN0IGludCB0ZW1wSW1hZ2VGZCA9IGdldFRl
bXBvcmFyeUZpbGUoZmlsZU5hbWUsIFBBVEhfTUFYKTsKLSAgICBpZiAodGVtcEltYWdlRmQgPT0g
LTEpCi0gICAgICAgIGFib3J0V2l0aEVycm9yTWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSB0ZW1w
b3JhcnkgZmlsZSIpOwotCi0gICAgZXZhc19yZW5kZXIoZXZhc19vYmplY3RfZXZhc19nZXQoaW1h
Z2UpKTsKLQotICAgIGlmIChldmFzX29iamVjdF9pbWFnZV9zYXZlKGltYWdlLCBmaWxlTmFtZSwg
MCwgMCkpIHsKLSAgICAgICAgc3RydWN0IHN0YXQgZmlsZUluZm87Ci0gICAgICAgIGlmICghc3Rh
dChmaWxlTmFtZSwgJmZpbGVJbmZvKSkgewotICAgICAgICAgICAgcHJpbnRmKCJDb250ZW50LUxl
bmd0aDogJWxkXG4iLCBmaWxlSW5mby5zdF9zaXplKTsKLSAgICAgICAgICAgIGZmbHVzaChzdGRv
dXQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyMDQ4XTsKLSAgICAgICAg
ICAgIHNzaXplX3QgYnl0ZXNSZWFkOwotICAgICAgICAgICAgd2hpbGUgKChieXRlc1JlYWQgPSBy
ZWFkKHRlbXBJbWFnZUZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgc3NpemVfdCBieXRlc1dyaXR0ZW4gPSAwOwotICAgICAgICAgICAgICAgIHNzaXpl
X3QgY291bnQ7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICBpZiAo
KGNvdW50ID0gd3JpdGUoMSwgYnVmZmVyICsgYnl0ZXNXcml0dGVuLCBieXRlc1JlYWQgLSBieXRl
c1dyaXR0ZW4pKSA8PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGJ5dGVzV3JpdHRlbiArPSBjb3VudDsKLSAgICAgICAgICAgICAgICB9IHdo
aWxlIChieXRlc1dyaXR0ZW4gPCBieXRlc1JlYWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIGNsb3NlKHRlbXBJbWFnZUZkKTsKLSAgICB1bmxpbmsoZmlsZU5hbWUpOwot
fQotCi1zdGF0aWMgdm9pZCBwcmludEltYWdlRGlmZmVyZW5jZXMoRXZhc19PYmplY3QqIGJhc2Vs
aW5lSW1hZ2UsIEV2YXNfT2JqZWN0KiBhY3R1YWxJbWFnZSkKLXsKLSAgICBSZWZQdHI8RXZhc19P
YmplY3Q+IGRpZmZlcmVuY2VJbWFnZTsKLSAgICBjb25zdCBmbG9hdCBkaWZmZXJlbmNlID0gY2Fs
Y3VsYXRlRGlmZmVyZW5jZShiYXNlbGluZUltYWdlLCBhY3R1YWxJbWFnZSwgZGlmZmVyZW5jZUlt
YWdlKTsKLQotICAgIGlmIChkaWZmZXJlbmNlID4gMC4wZikgewotICAgICAgICBpZiAoZGlmZmVy
ZW5jZUltYWdlKQotICAgICAgICAgICAgcHJpbnRJbWFnZShkaWZmZXJlbmNlSW1hZ2UuZ2V0KCkp
OwotCi0gICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4iLCBkaWZmZXJlbmNl
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcHJpbnRmKCJkaWZmOiAlMDEuMmYlJSBwYXNzZWRcbiIs
IGRpZmZlcmVuY2UpOwotfQotCi1zdGF0aWMgdm9pZCByZXNpemVFY29yZUV2YXNJZk5lZWRlZChF
dmFzX09iamVjdCogaW1hZ2UpCi17Ci0gICAgaW50IG5ld1dpZHRoLCBuZXdIZWlnaHQ7Ci0gICAg
ZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoaW1hZ2UsICZuZXdXaWR0aCwgJm5ld0hlaWdodCk7
Ci0KLSAgICBpbnQgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0OwotICAgIGVjb3JlX2V2YXNf
c2NyZWVuX2dlb21ldHJ5X2dldChnRWNvcmVFdmFzLmdldCgpLCAwLCAwLCAmY3VycmVudFdpZHRo
LCAmY3VycmVudEhlaWdodCk7Ci0KLSAgICBpZiAobmV3V2lkdGggPiBjdXJyZW50V2lkdGgpCi0g
ICAgICAgIGN1cnJlbnRXaWR0aCA9IG5ld1dpZHRoOwotICAgIGlmIChuZXdIZWlnaHQgPiBjdXJy
ZW50SGVpZ2h0KQotICAgICAgICBjdXJyZW50SGVpZ2h0ID0gbmV3SGVpZ2h0OwotCi0gICAgZWNv
cmVfZXZhc19yZXNpemUoZ0Vjb3JlRXZhcy5nZXQoKSwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVp
Z2h0KTsKLX0KLQotc3RhdGljIFBhc3NSZWZQdHI8RXZhc19PYmplY3Q+IHJlYWRJbWFnZUZyb21T
dGRpbihFdmFzKiBldmFzLCBsb25nIGltYWdlU2l6ZSkKLXsKLSAgICBPd25BcnJheVB0cjx1bnNp
Z25lZCBjaGFyPiBpbWFnZUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJb
aW1hZ2VTaXplXSk7Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgYWJvcnRXaXRoRXJy
b3JNZXNzYWdlKCJjYW5ub3QgYWxsb2NhdGUgaW1hZ2UiKTsKLQotICAgIGNvbnN0IHNpemVfdCBi
eXRlc1JlYWQgPSBmcmVhZChpbWFnZUJ1ZmZlci5nZXQoKSwgMSwgaW1hZ2VTaXplLCBzdGRpbik7
Ci0gICAgaWYgKCFieXRlc1JlYWQpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEV2YXNfT2Jq
ZWN0PigpOwotCi0gICAgRXZhc19PYmplY3QqIGltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfZmls
bGVkX2FkZChldmFzKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldChpbWFn
ZSwgRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9tZW1m
aWxlX3NldChpbWFnZSwgaW1hZ2VCdWZmZXIuZ2V0KCksIGJ5dGVzUmVhZCwgMCwgMCk7Ci0KLSAg
ICByZXNpemVFY29yZUV2YXNJZk5lZWRlZChpbWFnZSk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYo
aW1hZ2UpOwotfQotCi1zdGF0aWMgYm9vbCBwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCi17Ci0gICAgc3RhdGljIGNvbnN0IG9wdGlvbiBvcHRpb25zW10gPSB7
Ci0gICAgICAgIHsgInRvbGVyYW5jZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAndCcgfSwKLSAg
ICAgICAgeyAwLCAwLCAwLCAwIH0KLSAgICB9OwotICAgIGludCBvcHRpb247Ci0KLSAgICB3aGls
ZSAoKG9wdGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIChjaGFyKiBjb25zdCopYXJndiwgInQ6Iiwg
b3B0aW9ucywgMCkpICE9IC0xKSB7Ci0gICAgICAgIHN3aXRjaCAob3B0aW9uKSB7Ci0gICAgICAg
IGNhc2UgJ3QnOgotICAgICAgICAgICAgZ1RvbGVyYW5jZSA9IGF0b2Yob3B0YXJnKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgY2FzZSAnOic6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotc3RhdGljIHZvaWQgc2h1dGRvd25FZmwoKQotewotICAgIGVjb3JlX2V2YXNfc2h1
dGRvd24oKTsKLSAgICBlY29yZV9zaHV0ZG93bigpOwotICAgIGV2YXNfc2h1dGRvd24oKTsKLX0K
LQotc3RhdGljIHZvaWQgYWJvcnRXaXRoRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGVycm9yTWVz
c2FnZSkKLXsKLSAgICBzaHV0ZG93bkVmbCgpOwotCi0gICAgcHJpbnRmKCJFcnJvciwgJXMuXG4i
LCBlcnJvck1lc3NhZ2UpOwotICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLQotc3RhdGljIEV2
YXMqIGluaXRFZmwoKQotewotICAgIGV2YXNfaW5pdCgpOwotICAgIGVjb3JlX2luaXQoKTsKLSAg
ICBlY29yZV9ldmFzX2luaXQoKTsKLQotICAgIGdFY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9l
dmFzX2J1ZmZlcl9uZXcoMSwgMSkpOwotICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChn
RWNvcmVFdmFzLmdldCgpKTsKLSAgICBpZiAoIWV2YXMpCi0gICAgICAgIGFib3J0V2l0aEVycm9y
TWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSBFY29yZV9FdmFzIGJ1ZmZlciIpOwotCi0gICAgcmV0
dXJuIGV2YXM7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCi17Ci0gICAg
aWYgKCFwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhhcmdjLCBhcmd2KSkKLSAgICAgICAgcmV0dXJu
IEVYSVRfRkFJTFVSRTsKLQotICAgIEV2YXMqIGV2YXMgPSBpbml0RWZsKCk7Ci0KLSAgICBSZWZQ
dHI8RXZhc19PYmplY3Q+IGFjdHVhbEltYWdlOwotICAgIFJlZlB0cjxFdmFzX09iamVjdD4gYmFz
ZWxpbmVJbWFnZTsKLQotICAgIGNoYXIgYnVmZmVyWzIwNDhdOwotICAgIHdoaWxlIChmZ2V0cyhi
dWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikpIHsKLSAgICAgICAgY2hhciogY29udGVudExl
bmd0aFN0YXJ0ID0gc3Ryc3RyKGJ1ZmZlciwgIkNvbnRlbnQtTGVuZ3RoOiAiKTsKLSAgICAgICAg
aWYgKCFjb250ZW50TGVuZ3RoU3RhcnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
bG9uZyBpbWFnZVNpemU7Ci0gICAgICAgIGlmIChzc2NhbmYoY29udGVudExlbmd0aFN0YXJ0LCAi
Q29udGVudC1MZW5ndGg6ICVsZCIsICZpbWFnZVNpemUpID09IDEpIHsKLSAgICAgICAgICAgIGlm
IChpbWFnZVNpemUgPD0gMCkKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhFcnJvck1lc3NhZ2Uo
ImltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKLQotICAgICAgICAgICAgaWYgKCFhY3R1
YWxJbWFnZSkKLSAgICAgICAgICAgICAgICBhY3R1YWxJbWFnZSA9IHJlYWRJbWFnZUZyb21TdGRp
bihldmFzLCBpbWFnZVNpemUpOwotICAgICAgICAgICAgZWxzZSBpZiAoIWJhc2VsaW5lSW1hZ2Up
IHsKLSAgICAgICAgICAgICAgICBiYXNlbGluZUltYWdlID0gcmVhZEltYWdlRnJvbVN0ZGluKGV2
YXMsIGltYWdlU2l6ZSk7Ci0KLSAgICAgICAgICAgICAgICBwcmludEltYWdlRGlmZmVyZW5jZXMo
YmFzZWxpbmVJbWFnZS5nZXQoKSwgYWN0dWFsSW1hZ2UuZ2V0KCkpOwotCi0gICAgICAgICAgICAg
ICAgYWN0dWFsSW1hZ2UuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBiYXNlbGluZUltYWdlLmNs
ZWFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmZmx1c2goc3Rkb3V0
KTsKLSAgICB9Ci0KLSAgICBnRWNvcmVFdmFzLmNsZWFyKCk7IC8vIE1ha2Ugc3VyZSBlY29yZV9l
dmFzX2ZyZWUgaXMgY2FsbGVkIGJlZm9yZSB0aGUgRUZMIGFyZSBzaHV0IGRvd24KLQotICAgIHNo
dXRkb3duRWZsKCk7Ci0gICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL1Rv
b2xzL2VmbC9JbWFnZURpZmYvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9lZmwvSW1hZ2VEaWZmL0NN
YWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYmMxN2YxYzZiMzRiOWQzMWQwOGJjNDc5ZGMxZGQ2
YmFmODI1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9lZmwvSW1hZ2VEaWZmL0NNYWtlTGlz
dHMudHh0CkBAIC0wLDAgKzEsMjUgQEAKK3NldChJbWFnZURpZmZfU09VUkNFUworICAgICR7VE9P
TFNfRElSfS9lZmwvSW1hZ2VEaWZmL0ltYWdlRGlmZi5jcHAKKykKKworc2V0KEltYWdlRGlmZl9M
SUJSQVJJRVMKKyAgICAke0VDT1JFX0VWQVNfTElCUkFSSUVTfQorICAgICR7RUNPUkVfTElCUkFS
SUVTfQorICAgICR7RUlOQV9MSUJSQVJJRVN9CisgICAgJHtFVkFTX0xJQlJBUklFU30KKyAgICAk
e1dURl9MSUJSQVJZX05BTUV9CispCisKK3NldChJbWFnZURpZmZfSU5DTFVERV9ESVJFQ1RPUklF
UworICAgICR7Q01BS0VfQklOQVJZX0RJUn0KKyAgICAke0VDT1JFX0VWQVNfSU5DTFVERV9ESVJT
fQorICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQorICAgICR7RUlOQV9JTkNMVURFX0RJUlN9Cisg
ICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKyAgICAke1dURl9ESVJ9CispCisKK2luY2x1ZGVfZGly
ZWN0b3JpZXMoJHtJbWFnZURpZmZfSU5DTFVERV9ESVJFQ1RPUklFU30pCithZGRfZXhlY3V0YWJs
ZShJbWFnZURpZmYgJHtJbWFnZURpZmZfU09VUkNFU30pCit0YXJnZXRfbGlua19saWJyYXJpZXMo
SW1hZ2VEaWZmICR7SW1hZ2VEaWZmX0xJQlJBUklFU30pCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXMo
SW1hZ2VEaWZmIFBST1BFUlRJRVMgRk9MREVSICJUb29scyIpCmRpZmYgLS1naXQgYS9Ub29scy9l
ZmwvSW1hZ2VEaWZmL0ltYWdlRGlmZi5jcHAgYi9Ub29scy9lZmwvSW1hZ2VEaWZmL0ltYWdlRGlm
Zi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTI5YjZjYTU3Yzg1NDIzNjcyODBhYWY0OGVkZTI5Mzg5OTdhZTVl
YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2VmbC9JbWFnZURpZmYvSW1hZ2VEaWZmLmNwcApA
QCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsg
PHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUg
PEV2YXMuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVk
ZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5j
bHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9lZmwvUmVmUHRyRWZsLmg+CisKK2VudW0gUGl4ZWxDb21wb25l
bnQgeworICAgIFJlZCwKKyAgICBHcmVlbiwKKyAgICBCbHVlLAorICAgIEFscGhhCit9OworCitz
dGF0aWMgT3duUHRyPEVjb3JlX0V2YXM+IGdFY29yZUV2YXM7CitzdGF0aWMgZG91YmxlIGdUb2xl
cmFuY2UgPSAwOworCitzdGF0aWMgdm9pZCBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogZXJyb3JNZXNzYWdlKTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIqIHBpeGVsRnJvbUltYWdl
RGF0YSh1bnNpZ25lZCBjaGFyKiBpbWFnZURhdGEsIGludCByb3dTdHJpZGUsIGludCB4LCBpbnQg
eSkKK3sKKyAgICByZXR1cm4gaW1hZ2VEYXRhICsgKHkgKiByb3dTdHJpZGUpICsgKHggPDwgMik7
Cit9CisKK3N0YXRpYyBFdmFzX09iamVjdCogZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VC
dWZmZXIoRXZhcyogZXZhcywgdW5zaWduZWQgY2hhciogYnVmZmVyLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgRXZhc19PYmplY3QqIGltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfZmls
bGVkX2FkZChldmFzKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBhYm9ydFdpdGhFcnJvck1l
c3NhZ2UoImNvdWxkIG5vdCBjcmVhdGUgZGlmZmVyZW5jZSBpbWFnZSIpOworCisgICAgZXZhc19v
YmplY3RfaW1hZ2Vfc2l6ZV9zZXQoaW1hZ2UsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KGltYWdlLCBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgp
OworCisgICAgdW5zaWduZWQgY2hhciogZGlmZlBpeGVscyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChpbWFnZSwgRUlOQV9UUlVFKSk7Cisg
ICAgY29uc3QgaW50IHJvd1N0cmlkZSA9IGV2YXNfb2JqZWN0X2ltYWdlX3N0cmlkZV9nZXQoaW1h
Z2UpOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
KiBkaWZmUGl4ZWwgPSBwaXhlbEZyb21JbWFnZURhdGEoZGlmZlBpeGVscywgcm93U3RyaWRlLCB4
LCB5KTsKKyAgICAgICAgICAgIGRpZmZQaXhlbFtSZWRdID0gZGlmZlBpeGVsW0dyZWVuXSA9IGRp
ZmZQaXhlbFtCbHVlXSA9ICpidWZmZXIrKzsKKyAgICAgICAgICAgIGRpZmZQaXhlbFtBbHBoYV0g
PSAweGZmOworICAgICAgICB9CisgICAgfQorCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9z
ZXQoaW1hZ2UsIGRpZmZQaXhlbHMpOworCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMg
ZmxvYXQgY29tcHV0ZURpc3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyh1bnNpZ25lZCBjaGFy
IGFjdHVhbENvbXBvbmVudCwgdW5zaWduZWQgY2hhciBiYXNlQ29tcG9uZW50KQoreworICAgIHJl
dHVybiAoYWN0dWFsQ29tcG9uZW50IC0gYmFzZUNvbXBvbmVudCkgLyBzdGQ6Om1heDxmbG9hdD4o
MjU1IC0gYmFzZUNvbXBvbmVudCwgYmFzZUNvbXBvbmVudCk7Cit9CisKK3N0YXRpYyBmbG9hdCBj
b21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKHVuc2lnbmVkIGNoYXIqIGFjdHVh
bFBpeGVsLCB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWwsIFBpeGVsQ29tcG9uZW50IGNvbXBvbmVu
dCkKK3sKKyAgICByZXR1cm4gY29tcHV0ZURpc3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyhh
Y3R1YWxQaXhlbFtjb21wb25lbnRdLCBiYXNlUGl4ZWxbY29tcG9uZW50XSk7Cit9CisKK3N0YXRp
YyBmbG9hdCBjYWxjdWxhdGVQaXhlbERpZmZlcmVuY2UodW5zaWduZWQgY2hhciogYmFzZVBpeGVs
LCB1bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbCkKK3sKKyAgICBjb25zdCBmbG9hdCByZWQgPSBj
b21wdXRlRGlzdGFuY2VCZXR3ZWVuUGl4ZWxDb21wb25lbnRzKGFjdHVhbFBpeGVsLCBiYXNlUGl4
ZWwsIFJlZCk7CisgICAgY29uc3QgZmxvYXQgZ3JlZW4gPSBjb21wdXRlRGlzdGFuY2VCZXR3ZWVu
UGl4ZWxDb21wb25lbnRzKGFjdHVhbFBpeGVsLCBiYXNlUGl4ZWwsIEdyZWVuKTsKKyAgICBjb25z
dCBmbG9hdCBibHVlID0gY29tcHV0ZURpc3RhbmNlQmV0d2VlblBpeGVsQ29tcG9uZW50cyhhY3R1
YWxQaXhlbCwgYmFzZVBpeGVsLCBCbHVlKTsKKyAgICBjb25zdCBmbG9hdCBhbHBoYSA9IGNvbXB1
dGVEaXN0YW5jZUJldHdlZW5QaXhlbENvbXBvbmVudHMoYWN0dWFsUGl4ZWwsIGJhc2VQaXhlbCwg
QWxwaGEpOworICAgIHJldHVybiBzcXJ0ZihyZWQgKiByZWQgKyBncmVlbiAqIGdyZWVuICsgYmx1
ZSAqIGJsdWUgKyBhbHBoYSAqIGFscGhhKSAvIDIuMGY7Cit9CisKK3N0YXRpYyBmbG9hdCBjYWxj
dWxhdGVEaWZmZXJlbmNlKEV2YXNfT2JqZWN0KiBiYXNlbGluZUltYWdlLCBFdmFzX09iamVjdCog
YWN0dWFsSW1hZ2UsIFJlZlB0cjxFdmFzX09iamVjdD4mIGRpZmZlcmVuY2VJbWFnZSkKK3sKKyAg
ICBpbnQgd2lkdGgsIGhlaWdodCwgYmFzZWxpbmVXaWR0aCwgYmFzZWxpbmVIZWlnaHQ7CisgICAg
ZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoYWN0dWFsSW1hZ2UsICZ3aWR0aCwgJmhlaWdodCk7
CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoYmFzZWxpbmVJbWFnZSwgJmJhc2VsaW5l
V2lkdGgsICZiYXNlbGluZUhlaWdodCk7CisKKyAgICBpZiAod2lkdGggIT0gYmFzZWxpbmVXaWR0
aCB8fCBoZWlnaHQgIT0gYmFzZWxpbmVIZWlnaHQpIHsKKyAgICAgICAgcHJpbnRmKCJFcnJvciwg
dGVzdCBhbmQgcmVmZXJlbmNlIGltYWdlIGhhdmUgZGlmZmVyZW50IHNpemVzLlxuIik7CisgICAg
ICAgIHJldHVybiAxMDA7IC8vIENvbXBsZXRlbHkgZGlmZmVyZW50LgorICAgIH0KKworICAgIE93
bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IGRpZmZCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyB1
bnNpZ25lZCBjaGFyW3dpZHRoICogaGVpZ2h0XSk7CisgICAgaWYgKCFkaWZmQnVmZmVyKQorICAg
ICAgICBhYm9ydFdpdGhFcnJvck1lc3NhZ2UoImNvdWxkIG5vdCBjcmVhdGUgZGlmZmVyZW5jZSBi
dWZmZXIiKTsKKworICAgIGNvbnN0IGludCBhY3R1YWxSb3dTdHJpZGUgPSBldmFzX29iamVjdF9p
bWFnZV9zdHJpZGVfZ2V0KGFjdHVhbEltYWdlKTsKKyAgICBjb25zdCBpbnQgYmFzZVJvd1N0cmlk
ZSA9IGV2YXNfb2JqZWN0X2ltYWdlX3N0cmlkZV9nZXQoYmFzZWxpbmVJbWFnZSk7CisgICAgdW5z
aWduZWQgbnVtYmVyT2ZEaWZmZXJlbnRQaXhlbHMgPSAwOworICAgIGZsb2F0IHRvdGFsRGlzdGFu
Y2UgPSAwOworICAgIGZsb2F0IG1heERpc3RhbmNlID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyKiBh
Y3R1YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZXZhc19vYmplY3RfaW1h
Z2VfZGF0YV9nZXQoYWN0dWFsSW1hZ2UsIEVJTkFfRkFMU0UpKTsKKyAgICB1bnNpZ25lZCBjaGFy
KiBiYXNlUGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGV2YXNfb2JqZWN0X2lt
YWdlX2RhdGFfZ2V0KGJhc2VsaW5lSW1hZ2UsIEVJTkFfRkFMU0UpKTsKKyAgICB1bnNpZ25lZCBj
aGFyKiBjdXJyZW50RGlmZlBpeGVsID0gZGlmZkJ1ZmZlci5nZXQoKTsKKworICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbCA9IHBp
eGVsRnJvbUltYWdlRGF0YShhY3R1YWxQaXhlbHMsIGFjdHVhbFJvd1N0cmlkZSwgeCwgeSk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWwgPSBwaXhlbEZyb21JbWFnZURhdGEo
YmFzZVBpeGVscywgYmFzZVJvd1N0cmlkZSwgeCwgeSk7CisKKyAgICAgICAgICAgIGNvbnN0IGZs
b2F0IGRpc3RhbmNlID0gY2FsY3VsYXRlUGl4ZWxEaWZmZXJlbmNlKGJhc2VQaXhlbCwgYWN0dWFs
UGl4ZWwpOworICAgICAgICAgICAgKmN1cnJlbnREaWZmUGl4ZWwrKyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KGRpc3RhbmNlICogMjU1LjBmKTsKKworICAgICAgICAgICAgaWYgKGRpc3Rh
bmNlID49IDEuMGYgLyAyNTUuMGYpIHsKKyAgICAgICAgICAgICAgICArK251bWJlck9mRGlmZmVy
ZW50UGl4ZWxzOworICAgICAgICAgICAgICAgIHRvdGFsRGlzdGFuY2UgKz0gZGlzdGFuY2U7Cisg
ICAgICAgICAgICAgICAgbWF4RGlzdGFuY2UgPSBzdGQ6Om1heDxmbG9hdD4obWF4RGlzdGFuY2Us
IGRpc3RhbmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdo
ZW4gdXNpbmcgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoKSwgYSBjb21wbGVtZW50YXJ5IGV2
YXNfb2JqZWN0X2RhdGFfc2V0KCkgbXVzdCBiZQorICAgIC8vIGlzc3VlZCB0byBiYWxhbmNlIHRo
ZSByZWZlcmVuY2UgY291bnQsIGV2ZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVuIGNoYW5nZWQu
CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoYmFzZWxpbmVJbWFnZSwgYmFzZVBpeGVs
cyk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoYWN0dWFsSW1hZ2UsIGFjdHVhbFBp
eGVscyk7CisKKyAgICAvLyBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGFzIGEgcGVyY2VudGFnZSBj
b21iaW5pbmcgYm90aCB0aGUgbnVtYmVyIG9mCisgICAgLy8gZGlmZmVyZW50IHBpeGVscyBhbmQg
dGhlaXIgZGlmZmVyZW5jZSBhbW91bnQgaS5lLiB0aGUgYXZlcmFnZSBkaXN0YW5jZQorICAgIC8v
IG92ZXIgdGhlIGVudGlyZSBpbWFnZQorICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAwOworICAgIGlm
IChudW1iZXJPZkRpZmZlcmVudFBpeGVscykKKyAgICAgICAgZGlmZmVyZW5jZSA9IDEwMC4wZiAq
IHRvdGFsRGlzdGFuY2UgLyAoaGVpZ2h0ICogd2lkdGgpOworICAgIGlmIChkaWZmZXJlbmNlIDw9
IGdUb2xlcmFuY2UpCisgICAgICAgIGRpZmZlcmVuY2UgPSAwOworICAgIGVsc2UgeworICAgICAg
ICBkaWZmZXJlbmNlID0gcm91bmRmKGRpZmZlcmVuY2UgKiAxMDAuMGYpIC8gMTAwLjBmOworICAg
ICAgICBkaWZmZXJlbmNlID0gc3RkOjptYXgoZGlmZmVyZW5jZSwgMC4wMWYpOyAvLyByb3VuZCB0
byAyIGRlY2ltYWwgcGxhY2VzCisKKyAgICAgICAgZGlmZmVyZW5jZUltYWdlID0gYWRvcHRSZWYo
ZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIoZXZhc19vYmplY3RfZXZhc19nZXQo
YmFzZWxpbmVJbWFnZSksIGRpZmZCdWZmZXIuZ2V0KCksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gZGlmZmVyZW5jZTsKK30KKworc3RhdGljIGludCBnZXRUZW1wb3JhcnlG
aWxlKGNoYXIgKmZpbGVOYW1lLCBzaXplX3QgZmlsZU5hbWVMZW5ndGgpCit7CisgICAgY2hhciog
dGVtcERpcmVjdG9yeSA9IGdldGVudigiVE1QRElSIik7CisgICAgaWYgKCF0ZW1wRGlyZWN0b3J5
KQorICAgICAgICB0ZW1wRGlyZWN0b3J5ID0gZ2V0ZW52KCJURU1QIik7CisKKyAgICBpZiAodGVt
cERpcmVjdG9yeSkKKyAgICAgICAgc25wcmludGYoZmlsZU5hbWUsIGZpbGVOYW1lTGVuZ3RoLCAi
JXMvSW1hZ2VEaWZmWFhYWFhYLnBuZyIsIHRlbXBEaXJlY3RvcnkpOworICAgIGVsc2UgeworI2lm
IF9fbGludXhfXworICAgICAgICBzdHJjcHkoZmlsZU5hbWUsICIvZGV2L3NobS9JbWFnZURpZmZY
WFhYWFgucG5nIik7CisgICAgICAgIGNvbnN0IGludCBmaWxlRGVzY3JpcHRvciA9IG1rc3RlbXBz
KGZpbGVOYW1lLCBzaXplb2YoIi5wbmciKSAtIDEpOworICAgICAgICBpZiAoZmlsZURlc2NyaXB0
b3IgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiBmaWxlRGVzY3JpcHRvcjsKKyNlbmRpZiAvLyBf
X2xpbnV4X18KKworICAgICAgICBzdHJjcHkoZmlsZU5hbWUsICJJbWFnZURpZmZYWFhYWFgucG5n
Iik7CisgICAgfQorCisgICAgcmV0dXJuIG1rc3RlbXBzKGZpbGVOYW1lLCBzaXplb2YoIi5wbmci
KSAtIDEpOworfQorCitzdGF0aWMgdm9pZCBwcmludEltYWdlKEV2YXNfT2JqZWN0KiBpbWFnZSkK
K3sKKyAgICBjaGFyIGZpbGVOYW1lW1BBVEhfTUFYXTsKKworICAgIGNvbnN0IGludCB0ZW1wSW1h
Z2VGZCA9IGdldFRlbXBvcmFyeUZpbGUoZmlsZU5hbWUsIFBBVEhfTUFYKTsKKyAgICBpZiAodGVt
cEltYWdlRmQgPT0gLTEpCisgICAgICAgIGFib3J0V2l0aEVycm9yTWVzc2FnZSgiY291bGQgbm90
IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpOworCisgICAgZXZhc19yZW5kZXIoZXZhc19vYmplY3Rf
ZXZhc19nZXQoaW1hZ2UpKTsKKworICAgIGlmIChldmFzX29iamVjdF9pbWFnZV9zYXZlKGltYWdl
LCBmaWxlTmFtZSwgMCwgMCkpIHsKKyAgICAgICAgc3RydWN0IHN0YXQgZmlsZUluZm87CisgICAg
ICAgIGlmICghc3RhdChmaWxlTmFtZSwgJmZpbGVJbmZvKSkgeworICAgICAgICAgICAgcHJpbnRm
KCJDb250ZW50LUxlbmd0aDogJWxkXG4iLCBmaWxlSW5mby5zdF9zaXplKTsKKyAgICAgICAgICAg
IGZmbHVzaChzdGRvdXQpOworCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyMDQ4
XTsKKyAgICAgICAgICAgIHNzaXplX3QgYnl0ZXNSZWFkOworICAgICAgICAgICAgd2hpbGUgKChi
eXRlc1JlYWQgPSByZWFkKHRlbXBJbWFnZUZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkgPiAw
KSB7CisgICAgICAgICAgICAgICAgc3NpemVfdCBieXRlc1dyaXR0ZW4gPSAwOworICAgICAgICAg
ICAgICAgIHNzaXplX3QgY291bnQ7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAg
ICAgICAgICBpZiAoKGNvdW50ID0gd3JpdGUoMSwgYnVmZmVyICsgYnl0ZXNXcml0dGVuLCBieXRl
c1JlYWQgLSBieXRlc1dyaXR0ZW4pKSA8PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzV3JpdHRlbiArPSBjb3VudDsKKyAgICAgICAg
ICAgICAgICB9IHdoaWxlIChieXRlc1dyaXR0ZW4gPCBieXRlc1JlYWQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNsb3NlKHRlbXBJbWFnZUZkKTsKKyAgICB1bmxpbmso
ZmlsZU5hbWUpOworfQorCitzdGF0aWMgdm9pZCBwcmludEltYWdlRGlmZmVyZW5jZXMoRXZhc19P
YmplY3QqIGJhc2VsaW5lSW1hZ2UsIEV2YXNfT2JqZWN0KiBhY3R1YWxJbWFnZSkKK3sKKyAgICBS
ZWZQdHI8RXZhc19PYmplY3Q+IGRpZmZlcmVuY2VJbWFnZTsKKyAgICBjb25zdCBmbG9hdCBkaWZm
ZXJlbmNlID0gY2FsY3VsYXRlRGlmZmVyZW5jZShiYXNlbGluZUltYWdlLCBhY3R1YWxJbWFnZSwg
ZGlmZmVyZW5jZUltYWdlKTsKKworICAgIGlmIChkaWZmZXJlbmNlID4gMC4wZikgeworICAgICAg
ICBpZiAoZGlmZmVyZW5jZUltYWdlKQorICAgICAgICAgICAgcHJpbnRJbWFnZShkaWZmZXJlbmNl
SW1hZ2UuZ2V0KCkpOworCisgICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4i
LCBkaWZmZXJlbmNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpbnRmKCJkaWZmOiAlMDEuMmYl
JSBwYXNzZWRcbiIsIGRpZmZlcmVuY2UpOworfQorCitzdGF0aWMgdm9pZCByZXNpemVFY29yZUV2
YXNJZk5lZWRlZChFdmFzX09iamVjdCogaW1hZ2UpCit7CisgICAgaW50IG5ld1dpZHRoLCBuZXdI
ZWlnaHQ7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoaW1hZ2UsICZuZXdXaWR0aCwg
Jm5ld0hlaWdodCk7CisKKyAgICBpbnQgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0OworICAg
IGVjb3JlX2V2YXNfc2NyZWVuX2dlb21ldHJ5X2dldChnRWNvcmVFdmFzLmdldCgpLCAwLCAwLCAm
Y3VycmVudFdpZHRoLCAmY3VycmVudEhlaWdodCk7CisKKyAgICBpZiAobmV3V2lkdGggPiBjdXJy
ZW50V2lkdGgpCisgICAgICAgIGN1cnJlbnRXaWR0aCA9IG5ld1dpZHRoOworICAgIGlmIChuZXdI
ZWlnaHQgPiBjdXJyZW50SGVpZ2h0KQorICAgICAgICBjdXJyZW50SGVpZ2h0ID0gbmV3SGVpZ2h0
OworCisgICAgZWNvcmVfZXZhc19yZXNpemUoZ0Vjb3JlRXZhcy5nZXQoKSwgY3VycmVudFdpZHRo
LCBjdXJyZW50SGVpZ2h0KTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8RXZhc19PYmplY3Q+IHJl
YWRJbWFnZUZyb21TdGRpbihFdmFzKiBldmFzLCBsb25nIGltYWdlU2l6ZSkKK3sKKyAgICBPd25B
cnJheVB0cjx1bnNpZ25lZCBjaGFyPiBpbWFnZUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IHVu
c2lnbmVkIGNoYXJbaW1hZ2VTaXplXSk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAg
YWJvcnRXaXRoRXJyb3JNZXNzYWdlKCJjYW5ub3QgYWxsb2NhdGUgaW1hZ2UiKTsKKworICAgIGNv
bnN0IHNpemVfdCBieXRlc1JlYWQgPSBmcmVhZChpbWFnZUJ1ZmZlci5nZXQoKSwgMSwgaW1hZ2VT
aXplLCBzdGRpbik7CisgICAgaWYgKCFieXRlc1JlYWQpCisgICAgICAgIHJldHVybiBQYXNzUmVm
UHRyPEV2YXNfT2JqZWN0PigpOworCisgICAgRXZhc19PYmplY3QqIGltYWdlID0gZXZhc19vYmpl
Y3RfaW1hZ2VfZmlsbGVkX2FkZChldmFzKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNw
YWNlX3NldChpbWFnZSwgRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KTsKKyAgICBldmFzX29iamVj
dF9pbWFnZV9tZW1maWxlX3NldChpbWFnZSwgaW1hZ2VCdWZmZXIuZ2V0KCksIGJ5dGVzUmVhZCwg
MCwgMCk7CisKKyAgICByZXNpemVFY29yZUV2YXNJZk5lZWRlZChpbWFnZSk7CisKKyAgICByZXR1
cm4gYWRvcHRSZWYoaW1hZ2UpOworfQorCitzdGF0aWMgYm9vbCBwYXJzZUNvbW1hbmRMaW5lT3B0
aW9ucyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgc3RhdGljIGNvbnN0IG9wdGlvbiBv
cHRpb25zW10gPSB7CisgICAgICAgIHsgInRvbGVyYW5jZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAw
LCAndCcgfSwKKyAgICAgICAgeyAwLCAwLCAwLCAwIH0KKyAgICB9OworICAgIGludCBvcHRpb247
CisKKyAgICB3aGlsZSAoKG9wdGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIChjaGFyKiBjb25zdCop
YXJndiwgInQ6Iiwgb3B0aW9ucywgMCkpICE9IC0xKSB7CisgICAgICAgIHN3aXRjaCAob3B0aW9u
KSB7CisgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgZ1RvbGVyYW5jZSA9IGF0b2Yob3B0
YXJnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgY2Fz
ZSAnOic6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2h1dGRvd25FZmwoKQoreworICAgIGVj
b3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICBlY29yZV9zaHV0ZG93bigpOworICAgIGV2YXNfc2h1
dGRvd24oKTsKK30KKworc3RhdGljIHZvaWQgYWJvcnRXaXRoRXJyb3JNZXNzYWdlKGNvbnN0IGNo
YXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICBzaHV0ZG93bkVmbCgpOworCisgICAgcHJpbnRmKCJF
cnJvciwgJXMuXG4iLCBlcnJvck1lc3NhZ2UpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30K
Kworc3RhdGljIEV2YXMqIGluaXRFZmwoKQoreworICAgIGV2YXNfaW5pdCgpOworICAgIGVjb3Jl
X2luaXQoKTsKKyAgICBlY29yZV9ldmFzX2luaXQoKTsKKworICAgIGdFY29yZUV2YXMgPSBhZG9w
dFB0cihlY29yZV9ldmFzX2J1ZmZlcl9uZXcoMSwgMSkpOworICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChnRWNvcmVFdmFzLmdldCgpKTsKKyAgICBpZiAoIWV2YXMpCisgICAgICAgIGFi
b3J0V2l0aEVycm9yTWVzc2FnZSgiY291bGQgbm90IGNyZWF0ZSBFY29yZV9FdmFzIGJ1ZmZlciIp
OworCisgICAgcmV0dXJuIGV2YXM7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCit7CisgICAgaWYgKCFwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhhcmdjLCBhcmd2KSkKKyAg
ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworICAgIEV2YXMqIGV2YXMgPSBpbml0RWZsKCk7
CisKKyAgICBSZWZQdHI8RXZhc19PYmplY3Q+IGFjdHVhbEltYWdlOworICAgIFJlZlB0cjxFdmFz
X09iamVjdD4gYmFzZWxpbmVJbWFnZTsKKworICAgIGNoYXIgYnVmZmVyWzIwNDhdOworICAgIHdo
aWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikpIHsKKyAgICAgICAgY2hh
ciogY29udGVudExlbmd0aFN0YXJ0ID0gc3Ryc3RyKGJ1ZmZlciwgIkNvbnRlbnQtTGVuZ3RoOiAi
KTsKKyAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoU3RhcnQpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgbG9uZyBpbWFnZVNpemU7CisgICAgICAgIGlmIChzc2NhbmYoY29udGVudExl
bmd0aFN0YXJ0LCAiQ29udGVudC1MZW5ndGg6ICVsZCIsICZpbWFnZVNpemUpID09IDEpIHsKKyAg
ICAgICAgICAgIGlmIChpbWFnZVNpemUgPD0gMCkKKyAgICAgICAgICAgICAgICBhYm9ydFdpdGhF
cnJvck1lc3NhZ2UoImltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKKworICAgICAgICAg
ICAgaWYgKCFhY3R1YWxJbWFnZSkKKyAgICAgICAgICAgICAgICBhY3R1YWxJbWFnZSA9IHJlYWRJ
bWFnZUZyb21TdGRpbihldmFzLCBpbWFnZVNpemUpOworICAgICAgICAgICAgZWxzZSBpZiAoIWJh
c2VsaW5lSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBiYXNlbGluZUltYWdlID0gcmVhZEltYWdl
RnJvbVN0ZGluKGV2YXMsIGltYWdlU2l6ZSk7CisKKyAgICAgICAgICAgICAgICBwcmludEltYWdl
RGlmZmVyZW5jZXMoYmFzZWxpbmVJbWFnZS5nZXQoKSwgYWN0dWFsSW1hZ2UuZ2V0KCkpOworCisg
ICAgICAgICAgICAgICAgYWN0dWFsSW1hZ2UuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBiYXNl
bGluZUltYWdlLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
Zmx1c2goc3Rkb3V0KTsKKyAgICB9CisKKyAgICBnRWNvcmVFdmFzLmNsZWFyKCk7IC8vIE1ha2Ug
c3VyZSBlY29yZV9ldmFzX2ZyZWUgaXMgY2FsbGVkIGJlZm9yZSB0aGUgRUZMIGFyZSBzaHV0IGRv
d24KKworICAgIHNodXRkb3duRWZsKCk7CisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>