<?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>23325</bug_id>
          
          <creation_ts>2009-01-14 10:53:52 -0800</creation_ts>
          <short_desc>Upstream even more of platform/graphics/chromium</short_desc>
          <delta_ts>2009-01-14 11:29:35 -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 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>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>105732</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-14 10:53:52 -0800</bug_when>
    <thetext>Another batch that covers GlyphPageTreeNode, Icon, and ImageBuffer-related files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105734</commentid>
    <comment_count>1</comment_count>
      <attachid>26719</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-14 10:54:42 -0800</bug_when>
    <thetext>Created attachment 26719
upstream even more graphics/chromium bits

 WebCore/ChangeLog                                  |   42 ++++
 .../chromium/GlyphPageTreeNodeChromiumWin.cpp      |  248 ++++++++++++++++++++
 .../graphics/chromium/GlyphPageTreeNodeLinux.cpp   |   72 ++++++
 .../graphics/chromium/IconChromiumLinux.cpp        |   66 ++++++
 .../platform/graphics/chromium/IconChromiumMac.cpp |   60 +++++
 .../platform/graphics/chromium/IconChromiumWin.cpp |   87 +++++++
 .../platform/graphics/chromium/ImageBufferData.h   |   50 ++++
 .../platform/graphics/chromium/ImageChromiumMac.mm |   58 +++++
 .../graphics/chromium/MediaPlayerPrivateChromium.h |  101 ++++++++
 WebCore/platform/graphics/chromium/PlatformIcon.h  |   42 ++++
 10 files changed, 826 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105747</commentid>
    <comment_count>2</comment_count>
      <attachid>26719</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-14 11:16:50 -0800</bug_when>
    <thetext>Comment on attachment 26719
upstream even more graphics/chromium bits

I&apos;m surprised the cast is necessary:
 74     HDC dc = GetDC((HWND)0);

The spacing in IconChromiumLinux.cpp is wrong.

Looks fine otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105755</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-01-14 11:29:35 -0800</bug_when>
    <thetext>Committed in http://trac.webkit.org/changeset/39899 and http://trac.webkit.org/changeset/39900.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26719</attachid>
            <date>2009-01-14 10:54:42 -0800</date>
            <delta_ts>2009-01-14 11:16:50 -0800</delta_ts>
            <desc>upstream even more graphics/chromium bits</desc>
            <filename>upstream-even-more-graphics-chromium-bits.patch</filename>
            <type>text/plain</type>
            <size>34774</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">M2RhY2I3YzFjMmRmZGM0OTQ1YzA2MjVlMThkZGIzZWE0Y2Q5Yzk4YwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZWZiMTU4Li43ZjU5ZGY2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ1IEBACisyMDA5LTAxLTE0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgCisgICAgICAgIFVwc3RyZWFtIGV2ZW4gbW9yZSBncmFwaGljcy9jaHJvbWl1bSBiaXRz
LgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJv
bWl1bVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEVtcHR5R2x5cGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OmluaXRTcGFjZUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bGxCTVBHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE5vbkJNUEdseXBocyk6CisgICAg
ICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlTGludXguY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSWNvbkNocm9taXVtTGludXguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okljb246Okljb24pOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6fkljb24pOgorICAgICAgICAo
V2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SWNv
bjo6Y3JlYXRlSWNvbkZvckZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OnBhaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1NYWMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okljb246OmNyZWF0ZUljb25Gb3JGaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okljb246OmNyZWF0ZUljb25Gb3JGaWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpJY29uOjp+SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpwYWludCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtV2luLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJY29uOjpJY29uKToKKyAgICAgICAgKFdlYkNvcmU6Oklj
b246On5JY29uKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246OmNyZWF0ZUljb25Gb3JGaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okljb246OmNyZWF0ZUljb25Gb3JGaWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VCdWZmZXJEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjppbml0UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpp
bnZhbGlkYXRlUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUljb24uaDogQWRkZWQuCisKIDIwMDktMDEt
MTQgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyM2IxYzUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2Rl
Q2hyb21pdW1XaW4uY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRl
ICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaFBh
Z2VUcmVlTm9kZS5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVW5p
c2NyaWJlSGVscGVyVGV4dFJ1bi5oIgorI2luY2x1ZGUgIldpbmRvd3NWZXJzaW9uLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRmlsbHMgb25lIHBhZ2Ugb2YgZm9udCBkYXRhIHBvaW50
ZXJzIHdpdGggMCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlCisvLyBhcmUgbm8gZ2x5cGhzIGZvciB0
aGUgY2hhcmFjdGVycy4KK3N0YXRpYyB2b2lkIGZpbGxFbXB0eUdseXBocyhHbHlwaFBhZ2UqIHBh
Z2UpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKKyAg
ICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7Cit9CisKKy8vIExhemls
eSBpbml0aWFsaXplcyBzcGFjZSBnbHlwaAorc3RhdGljIEdseXBoIGluaXRTcGFjZUdseXBoKEhE
QyBkYywgR2x5cGgqIHNwYWNlR2x5cGgpCit7CisgICAgaWYgKCpzcGFjZUdseXBoKQorICAgICAg
ICByZXR1cm4gKnNwYWNlR2x5cGg7CisKKyAgICBzdGF0aWMgd2NoYXJfdCBzcGFjZSA9ICcgJzsK
KyAgICBHZXRHbHlwaEluZGljZXMoZGMsICZzcGFjZSwgMSwgc3BhY2VHbHlwaCwgMCk7CisgICAg
cmV0dXJuICpzcGFjZUdseXBoOworfQorCisvLyBGaWxscyB8bGVuZ3RofCBnbHlwaHMgc3RhcnRp
bmcgYXQgfG9mZnNldHwgaW4gYSB8cGFnZXwgaW4gdGhlIEJhc2ljIAorLy8gTXVsdGlsaW5ndWFs
IFBsYW5lICg8PSBVK0ZGRkYpLiBUaGUgaW5wdXQgYnVmZmVyIHNpemUgc2hvdWxkIGJlIHRoZQor
Ly8gc2FtZSBhcyB8bGVuZ3RofC4gV2UgY2FuIHVzZSB0aGUgc3RhbmRhcmQgV2luZG93cyBHREkg
ZnVuY3Rpb25zIGhlcmUuIAorLy8gUmV0dXJucyB0cnVlIGlmIGFueSBnbHlwaHMgd2VyZSBmb3Vu
ZC4KK3N0YXRpYyBib29sIGZpbGxCTVBHbHlwaHModW5zaWduZWQgb2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIFVDaGFyKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZSog
cGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2UpCit7CisgICAg
SERDIGRjID0gR2V0REMoKEhXTkQpMCk7CisgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2Jq
ZWN0KGRjLCBmb250RGF0YS0+bV9mb250Lmhmb250KCkpOworCisgICAgVEVYVE1FVFJJQyB0bSA9
IHswfTsKKyAgICBpZiAoIUdldFRleHRNZXRyaWNzKGRjLCAmdG0pKSB7CisgICAgICAgIFNlbGVj
dE9iamVjdChkYywgb2xkRm9udCk7CisgICAgICAgIFJlbGVhc2VEQygwLCBkYyk7CisKKyAgICAg
ICAgaWYgKHJlY3Vyc2UpIHsKKyAgICAgICAgICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6ZW5zdXJl
Rm9udExvYWRlZChmb250RGF0YS0+bV9mb250Lmhmb250KCkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmaWxsQk1QR2x5cGhzKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIHBhZ2UsIGZvbnREYXRh
LCBmYWxzZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaWxsRW1wdHlH
bHlwaHMocGFnZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5l
dmVyIGhhcHBlbi4gV2Ugd2FudCB0byBjcmFzaCB0aGUKKyAgICAgICAgICAgIC8vIHByb2Nlc3Mg
YW5kIHJlY2VpdmUgYSBjcmFzaCBkdW1wLiBXZSBzaG91bGQgcmV2aXNpdCB0aGlzIGNvZGUgbGF0
ZXIuCisgICAgICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxCisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGZpbGxFbXB0eUdseXBocyhwYWdl
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IEZJWE1FOiBHZXRHbHlwaEluZGljZXMoKSBzZXRzIGVhY2ggaXRlbSBvZiBsb2NhbEdseXBoQnVm
ZmVyW10KKyAgICAvLyB3aXRoIHRoZSBvbmUgb2YgdGhlIHZhbHVlcyBsaXN0ZWQgYmVsb3cuCisg
ICAgLy8gICogV2l0aCB0aGUgR0dJX01BUktfTk9ORVhJU1RJTkdfR0xZUEhTIGZsYWcKKyAgICAv
LyAgICArIElmIHRoZSBmb250IGhhcyBhIGdseXBoIGF2YWlsYWJsZSBmb3IgdGhlIGNoYXJhY3Rl
ciwKKyAgICAvLyAgICAgIGxvY2FsR2x5cGhCdWZmZXJbaV0gPiAweDAuCisgICAgLy8gICAgKyBJ
ZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGdseXBocyBhdmFpbGFibGUgZm9yIHRoZSBjaGFyYWN0
ZXIsCisgICAgLy8gICAgICBsb2NhbEdseXBoQnVmZmVyW2ldID0gMHgxRiAoVHJ1ZVR5cGUgQ29s
bGVjdGlvbj8pIG9yCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGIChP
cGVuVHlwZT8pLgorICAgIC8vICAqIFdpdGhvdXQgdGhlIEdHSV9NQVJLX05PTkVYSVNUSU5HX0dM
WVBIUyBmbGFnCisgICAgLy8gICAgKyBJZiB0aGUgZm9udCBoYXMgYSBnbHlwaCBhdmFpbGFibGUg
Zm9yIHRoZSBjaGFyYWN0ZXIsCisgICAgLy8gICAgICBsb2NhbEdseXBoQnVmZmVyW2ldID4gMHgw
LgorICAgIC8vICAgICsgSWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2ZSBnbHlwaHMgYXZhaWxhYmxl
IGZvciB0aGUgY2hhcmFjdGVyLAorICAgIC8vICAgICAgbG9jYWxHbHlwaEJ1ZmZlcltpXSA9IDB4
ODAuCisgICAgLy8gICAgICAoV2luZG93cyBhdXRvbWF0aWNhbGx5IGFzc2lnbnMgdGhlIGdseXBo
IGZvciBhIGJveCBjaGFyYWN0ZXIgdG8KKyAgICAvLyAgICAgIHByZXZlbnQgRXh0VGV4dE91dCgp
IGZyb20gcmV0dXJuaW5nIGVycm9ycy4pCisgICAgLy8gVG8gYXZvaWQgZnJvbSBodXJ0aW5nIHRo
ZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UsIHRoaXMgY29kZSBqdXN0CisgICAgLy8gdGVsbHMgV2Vi
S2l0IHdoZXRoZXIgb3Igbm90IHRoZSBhbGwgZ2x5cGggaW5kaWNlcyBmb3IgdGhlIGdpdmVuCisg
ICAgLy8gY2hhcmFjdGVycyBhcmUgMHg4MCAoaS5lLiBhIHBvc3NpYmx5LWludmFsaWQgZ2x5cGgp
IGFuZCBsZXQgaXQKKyAgICAvLyB1c2UgYWx0ZXJuYXRpdmUgZm9udHMgZm9yIHRoZSBjaGFyYWN0
ZXJzLgorICAgIC8vIEFsdGhvdWdoIHRoaXMgbWF5IGNhdXNlIGEgcHJvYmxlbSwgaXQgc2VlbXMg
dG8gd29yayBmaW5lIGFzIGZhciBhcyBJCisgICAgLy8gaGF2ZSB0ZXN0ZWQuIChPYnZpb3VzbHks
IEkgbmVlZCBtb3JlIHRlc3RzLikKKyAgICBXT1JEIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdl
OjpzaXplXTsKKworICAgIC8vIEZJWE1FOiBJIGZpbmQgc29tZSBDaGluZXNlIGNoYXJhY3RlcnMg
Y2FuIG5vdCBiZSBjb3JyZWN0bHkgZGlzcGxheWVkCisgICAgLy8gd2hlbiBjYWxsIEdldEdseXBo
SW5kaWNlcyB3aXRob3V0IGZsYWcgR0dJX01BUktfTk9ORVhJU1RJTkdfR0xZUEhTLAorICAgIC8v
IGJlY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW5kZXggaXMgc2V0IGFzIDB4MjAgd2hl
biBjdXJyZW50IGZvbnQKKyAgICAvLyBkb2VzIG5vdCBoYXZlIGdseXBocyBhdmFpbGFibGUgZm9y
IHRoZSBjaGFyYWN0ZXIuIEFjY29yZGluZyBhIGJsb2cgcG9zdAorICAgIC8vIGh0dHA6Ly9ibG9n
cy5tc2RuLmNvbS9taWNoa2FwL2FyY2hpdmUvMjAwNi8wNi8yOC82NDk3OTEuYXNweAorICAgIC8v
IEkgdGhpbmsgd2Ugc2hvdWxkIHN3aXRjaCB0byB0aGUgd2F5IGFib3V0IGNhbGxpbmcgR2V0R2x5
cGhJbmRpY2VzIHdpdGgKKyAgICAvLyBmbGFnIEdHSV9NQVJLX05PTkVYSVNUSU5HX0dMWVBIUywg
aXQgc2hvdWxkIGJlIE9LIGFjY29yZGluZyB0aGUKKyAgICAvLyBkZXNjcmlwdGlvbiBvZiBNU0RO
LgorICAgIC8vIEFsc28gYWNjb3JkaW5nIHRvIEp1bmdzaGlrIGFuZCBIaXJvbm9yaSdzIHN1Z2dl
c3Rpb24gYW5kIG1vZGlmaWNhdGlvbgorICAgIC8vIHdlIHRyZWF0IHR1cmV0eXBlIGFuZCByYXN0
ZXIgRm9udCBhcyBkaWZmZXJlbnQgd2F5IHdoZW4gd2luZG93cyB2ZXJzaW9uCisgICAgLy8gaXMg
bGVzcyB0aGFuIFZpc3RhLgorICAgIEdldEdseXBoSW5kaWNlcyhkYywgYnVmZmVyLCBsZW5ndGgs
IGxvY2FsR2x5cGhCdWZmZXIsIEdHSV9NQVJLX05PTkVYSVNUSU5HX0dMWVBIUyk7CisKKyAgICAv
LyBDb3B5IHRoZSBvdXRwdXQgdG8gdGhlIEdseXBoUGFnZQorICAgIGJvb2wgaGF2ZUdseXBocyA9
IGZhbHNlOworICAgIGludCBpbnZhbGlkR2x5cGggPSAweEZGRkY7CisgICAgaWYgKCFpc1Zpc3Rh
T3JOZXdlcigpICYmICEodG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZfVFJVRVRZUEUpKQorICAg
ICAgICBpbnZhbGlkR2x5cGggPSAweDFGOworCisgICAgR2x5cGggc3BhY2VHbHlwaCA9IDA7ICAv
LyBHbHlwaCBmb3IgYSBzcGFjZS4gTGF6aWx5IGZpbGxlZC4KKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBVQ2hhciBjID0gYnVmZmVyW2ldOwor
ICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07CisgICAgICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBnbHlwaEZvbnREYXRhID0gZm9udERhdGE7CisgICAgICAgIC8vIFdo
ZW4gdGhpcyBjaGFyYWN0ZXIgc2hvdWxkIGJlIGEgc3BhY2UsIHdlIGlnbm9yZSB3aGF0ZXZlciB0
aGUgZm9udAorICAgICAgICAvLyBzYXlzIGFuZCB1c2UgYSBzcGFjZS4gT3RoZXJ3aXNlLCBpZiBm
b250cyBkb24ndCBtYXAgb25lIG9mIHRoZXNlCisgICAgICAgIC8vIHNwYWNlIG9yIHplcm8gd2lk
dGggZ2x5cGhzLCB3ZSB3aWxsIGdldCBhIGJveC4KKyAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNT
cGFjZShjKSkKKyAgICAgICAgICAgIC8vIEhhcmQgY29kZSB0aGUgZ2x5cGggaW5kaWNlcyBmb3Ig
Y2hhcmFjdGVycyB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgLy8gdHJlYXRlZCBsaWtlIHNw
YWNlcy4KKyAgICAgICAgICAgIGdseXBoID0gaW5pdFNwYWNlR2x5cGgoZGMsICZzcGFjZUdseXBo
KTsKKyAgICAgICAgZWxzZSBpZiAoRm9udDo6dHJlYXRBc1plcm9XaWR0aFNwYWNlKGMpIHx8IGMg
PT0gMHgyMDBCKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogY2hhbmdlIEZvbnQ6OnRyZWF0QXNa
ZXJvV2lkdGhTcGFjZSB0byB1c2UKKyAgICAgICAgICAgIC8vIHVfaGFzQmluYXJ5UHJvcGVydHks
IHBlciBqdW5nc2hpaydzIGNvbW1lbnQgaGVyZToKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDIzNyNjNi4KKyAgICAgICAgICAgIC8vIFRo
ZW4gdGhlIGFkZGl0aW9uYWwgT1IgYWJvdmUgd29uJ3QgYmUgbmVjZXNzYXJ5LgorICAgICAgICAg
ICAgZ2x5cGggPSBpbml0U3BhY2VHbHlwaChkYywgJnNwYWNlR2x5cGgpOworICAgICAgICAgICAg
Z2x5cGhGb250RGF0YSA9IGZvbnREYXRhLT56ZXJvV2lkdGhGb250RGF0YSgpOworICAgICAgICB9
IGVsc2UgaWYgKGdseXBoID09IGludmFsaWRHbHlwaCkgeworICAgICAgICAgICAgLy8gV2ViS2l0
IGV4cGVjdHMgYm90aCB0aGUgZ2x5cGggaW5kZXggYW5kIEZvbnREYXRhCisgICAgICAgICAgICAv
LyBwb2ludGVyIHRvIGJlIDAgaWYgdGhlIGdseXBoIGlzIG5vdCBwcmVzZW50CisgICAgICAgICAg
ICBnbHlwaCA9IDA7CisgICAgICAgICAgICBnbHlwaEZvbnREYXRhID0gMDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChTaW1wbGVGb250RGF0YTo6aXNDSktDb2RlUG9pbnQoYykp
CisgICAgICAgICAgICAgICAgZ2x5cGhGb250RGF0YSA9IGZvbnREYXRhLT5jamtXaWR0aEZvbnRE
YXRhKCk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBwYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIob2Zmc2V0ICsgaSwgZ2x5cGgsIGdseXBo
Rm9udERhdGEpOworICAgIH0KKworICAgIFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7CisgICAg
UmVsZWFzZURDKDAsIGRjKTsKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworLy8gRm9yIG5v
bi1CTVAgY2hhcmFjdGVycywgZWFjaCBpcyB0d28gd29yZHMgKFVURi0xNikgYW5kIHRoZSBpbnB1
dCBidWZmZXIKKy8vIHNpemUgaXMgMiAqIHxsZW5ndGh8LiBTaW5jZSBHREkgZG9lc24ndCBrbm93
IGhvdyB0byBoYW5kbGUgbm9uLUJNUAorLy8gY2hhcmFjdGVycywgd2UgbXVzdCB1c2UgVW5pc2Ny
aWJlIHRvIHRlbGwgdXMgdGhlIGdseXBoIGluZGljZXMuCisvLworLy8gV2UgZG9uJ3Qgd2FudCB0
byBjYWxsIHRoaXMgaW4gdGhlIGNhc2Ugb2YgInJlZ3VsYXIiIGNoYXJhY3RlcnMgc2luY2Ugc29t
ZQorLy8gZm9udHMgbWF5IG5vdCBoYXZlIHRoZSBjb3JyZWN0IGNvbWJpbmluZyBydWxlcyBmb3Ig
YWNjZW50cy4gU2VlIHRoZSBub3RlcworLy8gYXQgdGhlIGJvdHRvbSBvZiBTY3JpcHRHZXRDTWFw
LiBXZSBjYW4ndCB1c2UgU2NyaXB0R2V0Q01hcCwgdGhvdWdoLCBzaW5jZQorLy8gaXQgZG9lc24n
dCBzZWVtIHRvIHN1cHBvcnQgVVRGLTE2LCBkZXNwaXRlIHdoYXQgdGhpcyBibG9nIHBvc3Qgc2F5
czoKKy8vICAgaHR0cDovL2Jsb2dzLm1zZG4uY29tL21pY2hrYXAvYXJjaGl2ZS8yMDA2LzA2LzI5
LzY1MDY4MC5hc3B4CisvLworLy8gU28gd2UgZmlyZSB1cCB0aGUgZnVsbCBVbmlzY3JpYmUgZG9v
aGlja3ksIGdpdmUgaXQgb3VyIHN0cmluZywgYW5kIGl0IHdpbGwKKy8vIGNvcnJlY3RseSBoYW5k
bGUgdGhlIFVURi0xNiBmb3IgdXMuIFRoZSBoYXJkIHBhcnQgaXMgdGFraW5nIHRoaXMgYW5kIGdl
dHRpbmcKKy8vIHRoZSBnbHlwaCBpbmRpY2VzIGJhY2sgb3V0IHRoYXQgY29ycmVzcG9uZCB0byB0
aGUgY29ycmVjdCBpbnB1dCBjaGFyYWN0ZXJzLAorLy8gc2luY2UgdGhleSBtYXkgYmUgbWlzc2lu
Zy4KKy8vCisvLyBSZXR1cm5zIHRydWUgaWYgYW55IGdseXBocyB3ZXJlIGZvdW5kLgorc3RhdGlj
IGJvb2wgZmlsbE5vbkJNUEdseXBocyh1bnNpZ25lZCBvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVUNoYXIqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdl
KiBwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEpCit7CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisKKyAgICBVbmlz
Y3JpYmVIZWxwZXJUZXh0UnVuIHN0YXRlKGJ1ZmZlciwgbGVuZ3RoICogMiwgZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGF0YS0+bV9mb250Lmhmb250KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGF0YS0+bV9mb250LnNjcmlwdENh
Y2hlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGF0YS0+bV9mb250
LnNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkpOworICAgIHN0YXRlLnNldEluaGliaXRMaWdhdGUodHJ1
ZSk7CisgICAgc3RhdGUuSW5pdCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgIC8vIEVhY2ggY2hhcmFjdGVyIGluIHRoaXMgaW5wdXQgYnVm
ZmVyIGlzIGEgc3Vycm9nYXRlIHBhaXIsIHdoaWNoCisgICAgICAgIC8vIGNvbnNpc3RzIG9mIHR3
byBVQ2hhcnMuIFNvLCB0aGUgb2Zmc2V0IGZvciBpdHMgaS10aCBjaGFyYWN0ZXIgaXMKKyAgICAg
ICAgLy8gKGkgKiAyKS4KKyAgICAgICAgV09SRCBnbHlwaCA9IHN0YXRlLkZpcnN0R2x5cGhGb3JD
aGFyYWN0ZXIoaSAqIDIpOworICAgICAgICBpZiAoZ2x5cGgpIHsKKyAgICAgICAgICAgIGhhdmVH
bHlwaHMgPSB0cnVlOworICAgICAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zm
c2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAv
LyBDbGVhciBib3RoIGdseXBoIGFuZCBmb250RGF0YSBmaWVsZHMuCisgICAgICAgICAgICBwYWdl
LT5zZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICB9CisgICAgcmV0
dXJuIGhhdmVHbHlwaHM7Cit9CisKKy8vIFdlJ3JlIHN1cHBvc2VkIHRvIHJldHVybiB0cnVlIGlm
IHRoZXJlIGFyZSBhbnkgZ2x5cGhzIGluIHRoZSByYW5nZQorLy8gc3BlY2lmaWVkIGJ5IHxvZmZz
ZXR8IGFuZCB8bGVuZ3RofCBpbiAgb3VyIGZvbnQsCisvLyBmYWxzZSBpZiB0aGVyZSBhcmUgbm9u
ZS4KK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
LCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEpCit7CisgICAgLy8g
V2UgaGF2ZSB0byBoYW5kbGUgQk1QIGFuZCBub24tQk1QIGNoYXJhY3RlcnMgZGlmZmVyZW50bHku
CisgICAgLy8gRklYTUU6IEFkZCBhc3NlcnRpb25zIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBp
cyBlbnRpcmVseSBpbiBCTVAKKyAgICAvLyBvciBlbnRpcmVseSBpbiBub24tQk1QLiAKKyAgICBp
ZiAoYnVmZmVyTGVuZ3RoID09IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZpbGxCTVBHbHlwaHMo
b2Zmc2V0LCBsZW5ndGgsIGNoYXJhY3RlckJ1ZmZlciwgdGhpcywgZm9udERhdGEsIHRydWUpOwor
CisgICAgaWYgKGJ1ZmZlckxlbmd0aCA9PSAyICogbGVuZ3RoKSB7CisgICAgICAgIC8vIEEgbm9u
LUJNUCBpbnB1dCBidWZmZXIgd2lsbCBiZSB0d2ljZSBhcyBsb25nIGFzIG91dHB1dCBnbHlwaCBi
dWZmZXIKKyAgICAgICAgLy8gYmVjYXVzZSBlYWNoIGNoYXJhY3RlciBpbiB0aGUgbm9uLUJNUCBp
bnB1dCBidWZmZXIgd2lsbCBiZSAKKyAgICAgICAgLy8gcmVwcmVzZW50ZWQgYnkgYSBzdXJyb2dh
dGUgcGFpciAodHdvIFVDaGFyJ3MpLgorICAgICAgICByZXR1cm4gZmlsbE5vbkJNUEdseXBocyhv
ZmZzZXQsIGxlbmd0aCwgY2hhcmFjdGVyQnVmZmVyLCB0aGlzLCBmb250RGF0YSk7CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUxpbnV4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyNGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVMaW51eC5jcHAK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
bHlwaFBhZ2VUcmVlTm9kZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJTa1RlbXBsYXRlcy5oIgorI2luY2x1ZGUgIlNrUGFp
bnQuaCIKKyNpbmNsdWRlICJTa1V0aWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhKQoreworICAgIGlmIChTa1VURjE2X0lzSGlnaFN1cnJvZ2F0ZShidWZmZXJbYnVmZmVy
TGVuZ3RoLTFdKSkgeworICAgICAgICBTa0RlYnVnZigiJXMgbGFzdCBjaGFyIGlzIGhpZ2gtc3Vy
cm9nYXRlIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBTa1BhaW50IHBhaW50OworICAgIGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5zZXR1
cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtVVEYx
Nl9UZXh0RW5jb2RpbmcpOworICAgIAorICAgIFNrQXV0b1NUTWFsbG9jIDxHbHlwaFBhZ2U6OnNp
emUsIHVpbnQxNl90PiBnbHlwaFN0b3JhZ2UobGVuZ3RoKTsKKyAgICB1aW50MTZfdCogZ2x5cGhz
ID0gZ2x5cGhTdG9yYWdlLmdldCgpOworICAgIC8vIHRleHRUb0dseXBocyB0YWtlcyBhIGJ5dGUg
Y291bnQsIG5vdCBhIGdseXBoIGNvdW50IHNvIHdlIG11bHRpcGx5IGJ5IHR3by4KKyAgICB1bnNp
Z25lZCBjb3VudCA9IHBhaW50LnRleHRUb0dseXBocyhidWZmZXIsIGJ1ZmZlckxlbmd0aCAqIDIs
IGdseXBocyk7CisgICAgaWYgKGNvdW50ICE9IGxlbmd0aCkgeworICAgICAgICBTa0RlYnVnZigi
JXMgY291bnQgIT0gbGVuZ3RoXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdW5zaWduZWQgYWxsR2x5cGhzID0gMDsgLy8gdHJhY2sgaWYgYW55
IG9mIHRoZSBnbHlwaElEcyBhcmUgbm9uLXplcm8KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0ICsg
aSwgZ2x5cGhzW2ldLCBnbHlwaHNbaV0gPyBmb250RGF0YSA6IE5VTEwpOworICAgICAgICBhbGxH
bHlwaHMgfD0gZ2x5cGhzW2ldOworICAgIH0KKworICAgIHJldHVybiBhbGxHbHlwaHMgIT0gMDsK
K30KKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtTGludXguY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29uQ2hyb21pdW1MaW51eC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmZDRjYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSWNvbkNocm9taXVtTGludXguY3BwCkBAIC0w
LDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSWNvbi5o
IgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0ljb246Okljb24oY29uc3QgUGxhdGZvcm1JY29uJiBpY29uKQorICAgIDogbV9pY29uKGlj
b24pCit7Cit9CisKK0ljb246On5JY29uKCkKK3sKK30KKworUGFzc1JlZlB0cjxJY29uPiBJY29u
OjpjcmVhdGVJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmKQoreworICBub3RJbXBsZW1lbnRlZCgp
OworICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9y
RmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mKQoreworICBub3RJbXBsZW1lbnRlZCgpOworICBy
ZXR1cm4gMDsKK30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JikKK3sKKyAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29u
Q2hyb21pdW1NYWMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JY29u
Q2hyb21pdW1NYWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZTM2
YmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ljb25DaHJvbWl1bU1hYy5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
YykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSWNvbi5oIgorCisjaW5jbHVkZSAiUGFzc1JlZlB0ci5oIgorCisvLyBG
SVhNRTogVGhlc2UgYXJlIHRlbXBvcmFyeSBzdHVicywgd2UgbmVlZCByZWFsIGltcGxlbWVudGF0
aW9ucyB3aGljaAorLy8gbWF5IGNvbWUgaW4gdGhlIGZvcm0gb2YgSWNvbkNocm9taXVtLmNwcC4g
IFRoZSBXaW5kb3dzIENocm9taXVtCisvLyBpbXBsZW1lbnRhdGlvbiBpcyBjdXJyZW50bHkgaW4g
SWNvbldpbi5jcHAuCisgCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SWNvbj4g
SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gMDsK
K30KKworUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mKQoreworICAgIHJldHVybiAwOworfQorCitJY29uOjp+SWNvbigpCit7Cit9
CisKK3ZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpCit7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SWNvbkNocm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SWNvbkNocm9taXVtV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
NDE5ZTZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JY29uQ2hyb21pdW1XaW4uY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkljb24uaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4K
KyNpbmNsdWRlIDxzaGVsbGFwaS5oPgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNv
bjo6SWNvbihjb25zdCBQbGF0Zm9ybUljb24mIGljb24pCisgICAgOiBtX2ljb24oaWNvbikKK3sK
K30KKworSWNvbjo6fkljb24oKQoreworICAgIGlmIChtX2ljb24pCisgICAgICAgIERlc3Ryb3lJ
Y29uKG1faWNvbik7Cit9CisKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZp
bGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBTSEZJTEVJTkZPIHNmaTsKKyAgICBt
ZW1zZXQoJnNmaSwgMCwgc2l6ZW9mKHNmaSkpOworCisgICAgU3RyaW5nIHRtcEZpbGVuYW1lID0g
ZmlsZW5hbWU7CisgICAgaWYgKCFTSEdldEZpbGVJbmZvKHRtcEZpbGVuYW1lLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsICZzZmksIHNpemVvZihzZmkpLCBTSEdGSV9JQ09OIHwg
U0hHRklfU0hFTExJQ09OU0laRSB8IFNIR0ZJX1NNQUxMSUNPTikpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKHNmaS5oSWNvbikpOworfQorCitQYXNz
UmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzKQoreworICAgIC8vIEZJWE1FOiBzdXBwb3J0IG11bHRpcGxlIGZpbGVzLgor
ICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lk
PTQwOTIKKyAgICBpZiAoIWZpbGVuYW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGNyZWF0ZUljb25Gb3JGaWxlKGZpbGVuYW1lc1swXSk7Cit9CisKK3ZvaWQgSWNv
bjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEhEQyBoZGMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmJl
Z2luUGxhdGZvcm1QYWludCgpOworICAgIERyYXdJY29uRXgoaGRjLCByZWN0LngoKSwgcmVjdC55
KCksIG1faWNvbiwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCAwLCAwLCBESV9OT1JNQUwp
OworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZW5kUGxhdGZvcm1Q
YWludCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDRiODkzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhX2gKKyNkZWZpbmUgSW1hZ2VC
dWZmZXJEYXRhX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKworI2luY2x1
ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEltYWdlQnVmZmVyRGF0YSB7CitwdWJsaWM6CisgICAgSW1hZ2VCdWZmZXJEYXRhKGNv
bnN0IEludFNpemUmKTsKKworICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzIG1fY2FudmFzOworICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgbV9wbGF0Zm9ybUNvbnRleHQ7Cit9OworCit9ICAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIEltYWdlQnVmZmVyRGF0YV9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW0g
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczYTQwOQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1h
Yy5tbQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEEgd3JhcHBlciBhcm91bmQgVW5pc2Ny
aWJlIHRoYXQgcHJvdmlkZXMgYSByZWFzb25hYmxlIEFQSS4KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorI2luY2x1ZGUgIkltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0
cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCit7
CisgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKG5h
bWUpOworfQorCisvLyBGSVhNRTogVGhlc2UgYXJlIHRlbXBvcmFyeSBzdHVicywgd2UgbmVlZCBy
ZWFsIGltcGxlbWVudGF0aW9ucyB3aGljaAorLy8gbWF5IGNvbWUgaW4gdGhlIGZvcm0gb2YgSW1h
Z2VDaHJvbWl1bS5jcHAuICBUaGUgV2luZG93cyBDaHJvbWl1bQorLy8gaW1wbGVtZW50YXRpb24g
aXMgY3VycmVudGx5IGluIEltYWdlU2tpYS5jcHAuCisgCit2b2lkIEJpdG1hcEltYWdlOjppbml0
UGxhdGZvcm1EYXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxpZGF0ZVBsYXRm
b3JtRGF0YSgpCit7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9t
aXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJp
dmF0ZUNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5MTQ3
YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtX2gKKyNkZWZpbmUgTWVkaWFQbGF5ZXJQ
cml2YXRlQ2hyb21pdW1faAorCisjaWYgRU5BQkxFKFZJREVPKQorCisjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXllclByaXZh
dGUgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIE1lZGlhUGxheWVyUHJpdmF0
ZShNZWRpYVBsYXllciopOworICAgIH5NZWRpYVBsYXllclByaXZhdGUoKTsKKworICAgIEludFNp
emUgbmF0dXJhbFNpemUoKSBjb25zdDsKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisKKyAg
ICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgY2FuY2VsTG9hZCgpOwor
CisgICAgdm9pZCBwbGF5KCk7CisgICAgdm9pZCBwYXVzZSgpOyAgICAKKworICAgIGJvb2wgcGF1
c2VkKCkgY29uc3Q7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Q7CisKKyAgICBmbG9hdCBkdXJh
dGlvbigpIGNvbnN0OworICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdm9pZCBz
ZWVrKGZsb2F0IHRpbWUpOworICAgIHZvaWQgc2V0RW5kVGltZShmbG9hdCk7CisKKyAgICB2b2lk
IHNldFJhdGUoZmxvYXQpOworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0KTsKKworICAgIGludCBk
YXRhUmF0ZSgpIGNvbnN0OworCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3Jr
U3RhdGUoKSBjb25zdDsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkg
Y29uc3Q7CisKKyAgICBmbG9hdCBtYXhUaW1lQnVmZmVyZWQoKSBjb25zdDsKKyAgICBmbG9hdCBt
YXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc0xvYWRlZCgpIGNvbnN0
OworICAgIGJvb2wgdG90YWxCeXRlc0tub3duKCkgY29uc3Q7CisgICAgdW5zaWduZWQgdG90YWxC
eXRlcygpIGNvbnN0OworCisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworICAgIHZvaWQgc2V0
UmVjdChjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKKworICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhh
c2hTZXQ8U3RyaW5nPiYpOworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICAv
LyBQdWJsaWMgbWV0aG9kcyB0byBiZSBjYWxsZWQgYnkgV2ViTWVkaWFQbGF5ZXIKKyAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldygpOworICAgIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAg
IHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7CisgICAg
dm9pZCB2b2x1bWVDaGFuZ2VkKCk7CisgICAgdm9pZCByZXBhaW50KCk7CisKK3ByaXZhdGU6Cisg
ICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIHZvaWQqIG1fZGF0YTsKK307CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gTWVkaWFQbGF5ZXJQcml2
YXRlQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9QbGF0Zm9ybUljb24uaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1JY29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2MTNi
OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1JY29uLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAw
OCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3Jt
SWNvbl9oCisjZGVmaW5lIFBsYXRmb3JtSWNvbl9oCisKK3R5cGVkZWYgc3RydWN0IEhJQ09OX18q
IEhJQ09OOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSElDT04gUGxhdGZvcm1J
Y29uOworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgIC8vIFBsYXRmb3JtSWNv
bl9oCg==
</data>
<flag name="review"
          id="12734"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>