<?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>31468</bug_id>
          
          <creation_ts>2009-11-13 05:43:44 -0800</creation_ts>
          <short_desc>Unify TextBoundaries implementations by only relying on WTF Unicode abstractions</short_desc>
          <delta_ts>2009-11-14 03:57:12 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          
          <blocked>15914</blocked>
    
    <blocked>31469</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dominik Röttsches (drott)">d-r</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>163287</commentid>
    <comment_count>0</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-13 05:43:44 -0800</bug_when>
    <thetext>Currently, there are multiple TextBoundaries implementations, one based on ICU (platform/text/TextBoundariesICU.cpp), one for QT (text/qt/TextBoundaries.cpp) - and for closing bug 15914, there would be another one needed for GTK/GLib. In order to reduce code duplication, I suggest to unify these into one, only using WTF abstractions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163315</commentid>
    <comment_count>1</comment_count>
      <attachid>43157</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-13 08:28:51 -0800</bug_when>
    <thetext>Created attachment 43157
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp

TextBoundaries.cpp intends to be equivalent to the TextBoundariesICU.cpp but is relying on internal abstractions. 
Removing unneeded ICU includes in SimpleFontDataGtk.cpp on the way.

I did not try to merge the Qt version of TextBoundaries.cpp - could someone from the Qt WebKit team look at whether that&apos;s desired? Who would be best CC&apos;ed on this bug regarding this question?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163321</commentid>
    <comment_count>2</comment_count>
      <attachid>43160</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-13 08:43:34 -0800</bug_when>
    <thetext>Created attachment 43160
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v2)

Minor copyright fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163323</commentid>
    <comment_count>3</comment_count>
      <attachid>43160</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-13 08:48:28 -0800</bug_when>
    <thetext>Comment on attachment 43160
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v2)

We normally use &quot;using namespace&quot; to bring in the WTF Unicode functions. See this idiom in files such as Document.cpp, Font.cpp, and String.cpp.

This patch otherwise looks good to me.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163338</commentid>
    <comment_count>4</comment_count>
      <attachid>43164</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-13 09:13:39 -0800</bug_when>
    <thetext>Created attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

Changed according to Darin&apos;s suggestion to use a &quot;using namespace&quot; declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163444</commentid>
    <comment_count>5</comment_count>
      <attachid>43164</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 12:30:52 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

Changes to be committed also need an r+.   Looks sane to me too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163484</commentid>
    <comment_count>6</comment_count>
      <attachid>43164</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-13 13:48:04 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

Rejecting patch 43164 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11621 test cases.
http/tests/xmlhttprequest/access-control-basic-allow-access-control-origin-header-data-url.html -&gt; crashed

Exiting early after 1 failures. 9149 tests run.
466.37s total testing time

9148 test cases (99%) succeeded
1 test case (&lt;1%) crashed
5 test cases (&lt;1%) had stderr output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163488</commentid>
    <comment_count>7</comment_count>
      <attachid>43164</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 13:52:40 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

We have a bad JSC regression atm.  bug 31461.  Let&apos;s try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163512</commentid>
    <comment_count>8</comment_count>
      <attachid>43164</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-13 14:11:33 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

Rejecting patch 43164 from commit-queue.

Failed to run &quot;WebKitTools/Scripts/build-webkit&quot; exit_code: 1
Last 500 characters of output:
ld/WebCore.build/Release/WebCore.build/Objects-normal/i386/JSCompositionEvent.o /Users/eseidel/Projects/CommitQueue/WebKitBuild/Release/DerivedSources/WebCore/JSCompositionEvent.cpp normal i386 c++ com.apple.compilers.gcc.4_2
	Distributed-CompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/i386/JSEventCustom.o /Users/eseidel/Projects/CommitQueue/WebCore/bindings/js/JSEventCustom.cpp normal i386 c++ com.apple.compilers.gcc.4_2
(2 failures)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163514</commentid>
    <comment_count>9</comment_count>
      <attachid>43164</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 14:13:52 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

I&apos;m in the process of moving the commit-queue to a new machine, and it&apos;s had hiccups.  Sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163534</commentid>
    <comment_count>10</comment_count>
      <attachid>43164</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-13 14:45:56 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

Rejecting patch 43164 from commit-queue.

Failed to run &quot;WebKitTools/Scripts/build-webkit&quot; exit_code: 1
Last 500 characters of output:
ld/WebCore.build/Release/WebCore.build/Objects-normal/i386/JSCompositionEvent.o /Users/eseidel/Projects/CommitQueue/WebKitBuild/Release/DerivedSources/WebCore/JSCompositionEvent.cpp normal i386 c++ com.apple.compilers.gcc.4_2
	Distributed-CompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/i386/JSEventCustom.o /Users/eseidel/Projects/CommitQueue/WebCore/bindings/js/JSEventCustom.cpp normal i386 c++ com.apple.compilers.gcc.4_2
(2 failures)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163537</commentid>
    <comment_count>11</comment_count>
      <attachid>43164</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 14:48:11 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

My continued apologies.  I&apos;ve reverted back to the old commit-queue machine
until I can figure out the build issue.  Hopefully the next run will not hit
the JSC crasher. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163565</commentid>
    <comment_count>12</comment_count>
      <attachid>43164</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-13 15:47:57 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

Rejecting patch 43164 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11622 test cases.
http/tests/xmlhttprequest/workers/shared-worker-close.html -&gt; crashed

Exiting early after 1 failures. 9308 tests run.
522.97s total testing time

9307 test cases (99%) succeeded
1 test case (&lt;1%) crashed
5 test cases (&lt;1%) had stderr output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163566</commentid>
    <comment_count>13</comment_count>
      <attachid>43164</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 15:49:38 -0800</bug_when>
    <thetext>Comment on attachment 43164
Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)

Bug 31461 again. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163575</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 16:10:12 -0800</bug_when>
    <thetext>Landed as r50977.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163589</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 16:39:49 -0800</bug_when>
    <thetext>Committed r50980: &lt;http://trac.webkit.org/changeset/50980&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163591</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 16:40:19 -0800</bug_when>
    <thetext>Windows and Chromium builds broke after the first commit.  The second commit was to fix them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163662</commentid>
    <comment_count>17</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-14 03:57:12 -0800</bug_when>
    <thetext>Thanks for additional review and build fixes, Eric!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43157</attachid>
            <date>2009-11-13 08:28:51 -0800</date>
            <delta_ts>2009-11-13 08:43:34 -0800</delta_ts>
            <desc>Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp</desc>
            <filename>unify_TextBoundaries.diff</filename>
            <type>text/plain</type>
            <size>11955</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwOTQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMTMgIERvbWluaWsg
UsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkgVGV4dEJv
dW5kYXJpZXMgaW1wbGVtZW50YXRpb25zIGJ5IG9ubHkgcmVseWluZyBvbiBXVEYgVW5pY29kZSBh
YnN0cmFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMxNDY4CisKKyAgICAgICAgQWRkaW5nIGlzQWxwaGFudW1lcmljIGFic3RyYWN0aW9uLCBy
ZXF1aXJlZAorICAgICAgICBieSBUZXh0Qm91bmRhcmllcy5jcHAuCisKKyAgICAgICAgKiB3dGYv
dW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmg6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzQWxw
aGFudW1lcmljKToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9pY3UvVW5pY29kZUljdS5oOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjppc0FscGhhbnVtZXJpYyk6CisKIDIwMDktMTEtMTIgIFN0ZXZl
IFZhbkRlQm9nYXJ0ICA8dmFuZGVib0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5p
Y29kZUdMaWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGli
L1VuaWNvZGVHTGliLmgJKHJldmlzaW9uIDUwOTM3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDEx
IEBAIGlubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCiAgICAgcmV0dXJuIGMgPj0g
MHgwNjAwICYmIGMgPD0gMHgwNkZGOwogfQogCitpbmxpbmUgYm9vbCBpc0FscGhhbnVtZXJpYyhV
Q2hhcjMyIGMpCit7CisgICAgcmV0dXJuIGdfdW5pY2hhcl9pc2FsbnVtKGMpOworfQorCiBpbmxp
bmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIzMiBjKQogewogICAgIHJldHVybiBnX3VuaWNoYXJf
dHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvaWN1L1VuaWNvZGVJY3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS9pY3UvVW5pY29kZUljdS5oCShyZXZpc2lvbiA1MDkzNykKKysrIEphdmFTY3JpcHRD
b3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2
ICsxNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKICAgICAgIHJl
dHVybiB1YmxvY2tfZ2V0Q29kZShjKSA9PSBVQkxPQ0tfQVJBQklDOwogfQogCitpbmxpbmUgYm9v
bCBpc0FscGhhbnVtZXJpYyhVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIHVfaXNhbG51bShjKTsK
K30KKwogaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMpCiB7CiAgICAgcmV0
dXJuIHVfY2hhclR5cGUoYykgPT0gVV9TUEFDRV9TRVBBUkFUT1I7CkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTA5NDAp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisy
MDA5LTExLTEzICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNz
LWNvbXBhbnkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVuaWZ5IFRleHRCb3VuZGFyaWVzIGltcGxlbWVudGF0aW9ucyBieSBvbmx5IHJlbHlp
bmcgb24gV1RGIFVuaWNvZGUgYWJzdHJhY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTQ2OAorCisgICAgICAgIE1vdmluZyBUZXh0Qm91bmRh
cmllc0lDVS5jcHAgdG8gVGV4dEJvdW5kYXJpZXMuY3BwCisgICAgICAgIGJ5IHJlbW92aW5nIHRo
ZSBkaXJlY3QgSUNVIGRlcGVuZGVuY3kgYW5kIHJlcGxhY2luZyBpdAorICAgICAgICB3aXRoIFdU
RiBmdW5jdGlvbnMgYW5kIFdlYkNvcmUncyBvd24gVGV4dEJyZWFrSXRlcmF0b3IKKyAgICAgICAg
YWJzdHJhY3Rpb25zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpm
aW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFy
eSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dGV4dEJyZWFrTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQcmV2aW91
cyk6CisKIDIwMDktMTEtMTMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDUw
OTM3KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTYzNiw3
ICsxNjM2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nSW1wbC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5oIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEJvdW5kYXJpZXMuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1Uu
aCBcCkBAIC0yMDI4LDcgKzIwMjgsNiBAQCBpZiBVU0VfSUNVX1VOSUNPREUKIHdlYmNvcmVndGtf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAotCiBlbmRpZgogCiAjIC0tLS0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250
RGF0YUd0ay5jcHAJKHJldmlzaW9uIDUwOTM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw2
IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKICNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNs
dWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJp
ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisKKyNpbmNsdWRlICJT
dHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlIDxV
bmljb2RlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50IGZpbmROZXh0V29yZEZyb21J
bmRleChjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3
YXJkKQoreworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNo
YXJzLCBsZW4pOworCisgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgcG9zaXRpb24gPSB0ZXh0
QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9
IFRleHRCcmVha0RvbmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4g
dGhlIGNoYXJhY3RlciBwcmVjZWVkaW5nIHRoZSBicmVhaworICAgICAgICAgICAgLy8gaXMgYWxw
aGFudW1lcmljLgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbGVuICYmIFdURjo6VW5pY29k
ZTo6aXNBbHBoYW51bWVyaWMoY2hhcnNbcG9zaXRpb24gLSAxXSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHBvc2l0aW9uOworCisgICAgICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxv
d2luZyhpdCwgcG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxlbjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha1ByZWNlZGluZyhpdCwgcG9z
aXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAg
ICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIGZvbGxvd2lu
ZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAg
IGlmIChwb3NpdGlvbiA+IDAgJiYgV1RGOjpVbmljb2RlOjppc0FscGhhbnVtZXJpYyhjaGFyc1tw
b3NpdGlvbl0pKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICAg
ICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5
KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBp
bnQqIGVuZCkKK3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRv
cihjaGFycywgbGVuKTsKKyAgICAqZW5kID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlv
bik7CisgICAgaWYgKCplbmQgPCAwKQorICAgICAgICAqZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7
CisgICAgKnN0YXJ0ID0gdGV4dEJyZWFrUHJldmlvdXMoaXQpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lD
VS5jcHAJKHJldmlzaW9uIDUwOTM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3Vu
ZGFyaWVzSUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgot
Ci0jaW5jbHVkZSA8dW5pY29kZS91YnJrLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgot
Ci0jaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgotI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25z
dCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQotewot
ICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOwot
Ci0gICAgaWYgKGZvcndhcmQpIHsKLSAgICAgICAgcG9zaXRpb24gPSB1YnJrX2ZvbGxvd2luZyhp
dCwgcG9zaXRpb24pOwotICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVUJSS19ET05FKSB7Ci0g
ICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgcHJlY2Vl
ZGluZyB0aGUgYnJlYWsKLSAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KLSAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiB1X2lzYWxudW0oY2hhcnNbcG9zaXRpb24gLSAxXSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotCi0gICAgICAgICAgICBwb3NpdGlv
biA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbGVuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBvc2l0aW9uID0gdWJya19wcmVjZWRp
bmcoaXQsIHBvc2l0aW9uKTsKLSAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkg
ewotICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIGZv
bGxvd2luZyB0aGUgYnJlYWsKLSAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KLSAgICAg
ICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgdV9pc2FsbnVtKGNoYXJzW3Bvc2l0aW9uXSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwotCi0gICAgICAgICAgICBwb3NpdGlvbiA9
IHVicmtfcHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hh
cnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCi17Ci0gICAg
VUJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7Ci0gICAg
KmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3NpdGlvbik7Ci0gICAgaWYgKCplbmQgPCAwKQot
ICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0KTsKLSAgICAqc3RhcnQgPSB1YnJrX3ByZXZpb3Vz
KGl0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDUwOTM3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBzZW50
ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKIAogICAgIGludCB0
ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciopOworICAgIGludCB0ZXh0QnJlYWtMYXN0
KFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRl
cmF0b3IqKTsKKyAgICBpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqKTsK
ICAgICBpbnQgdGV4dEJyZWFrQ3VycmVudChUZXh0QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0
ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwogICAgIGludCB0ZXh0
QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCShyZXZpc2lvbiA1MDkz
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDExICs5MCwyMSBAQCBpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJy
ZWFrSXRlcmF0b3IqIGJpCiAgICAgcmV0dXJuIHVicmtfZmlyc3QoYmkpOwogfQogCitpbnQgdGV4
dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIHVicmtfbGFz
dChiaSk7Cit9CisKIGludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKIHsK
ICAgICByZXR1cm4gdWJya19uZXh0KGJpKTsKIH0KIAoraW50IHRleHRCcmVha1ByZXZpb3VzKFRl
eHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdWJya19wcmV2aW91cyhiaSk7Cit9
CisKIGludCB0ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9z
KQogewogICAgIHJldHVybiB1YnJrX3ByZWNlZGluZyhiaSwgcG9zKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43160</attachid>
            <date>2009-11-13 08:43:34 -0800</date>
            <delta_ts>2009-11-13 09:13:39 -0800</delta_ts>
            <desc>Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v2)</desc>
            <filename>unify_TextBoundaries_v2.diff</filename>
            <type>text/plain</type>
            <size>11985</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwOTQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMTMgIERvbWluaWsg
UsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkgVGV4dEJv
dW5kYXJpZXMgaW1wbGVtZW50YXRpb25zIGJ5IG9ubHkgcmVseWluZyBvbiBXVEYgVW5pY29kZSBh
YnN0cmFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMxNDY4CisKKyAgICAgICAgQWRkaW5nIGlzQWxwaGFudW1lcmljIGFic3RyYWN0aW9uLCBy
ZXF1aXJlZAorICAgICAgICBieSBUZXh0Qm91bmRhcmllcy5jcHAuCisKKyAgICAgICAgKiB3dGYv
dW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmg6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzQWxw
aGFudW1lcmljKToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9pY3UvVW5pY29kZUljdS5oOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjppc0FscGhhbnVtZXJpYyk6CisKIDIwMDktMTEtMTIgIFN0ZXZl
IFZhbkRlQm9nYXJ0ICA8dmFuZGVib0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5p
Y29kZUdMaWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGli
L1VuaWNvZGVHTGliLmgJKHJldmlzaW9uIDUwOTM3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDEx
IEBAIGlubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCiAgICAgcmV0dXJuIGMgPj0g
MHgwNjAwICYmIGMgPD0gMHgwNkZGOwogfQogCitpbmxpbmUgYm9vbCBpc0FscGhhbnVtZXJpYyhV
Q2hhcjMyIGMpCit7CisgICAgcmV0dXJuIGdfdW5pY2hhcl9pc2FsbnVtKGMpOworfQorCiBpbmxp
bmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIzMiBjKQogewogICAgIHJldHVybiBnX3VuaWNoYXJf
dHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvaWN1L1VuaWNvZGVJY3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS9pY3UvVW5pY29kZUljdS5oCShyZXZpc2lvbiA1MDkzNykKKysrIEphdmFTY3JpcHRD
b3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2
ICsxNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKICAgICAgIHJl
dHVybiB1YmxvY2tfZ2V0Q29kZShjKSA9PSBVQkxPQ0tfQVJBQklDOwogfQogCitpbmxpbmUgYm9v
bCBpc0FscGhhbnVtZXJpYyhVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIHVfaXNhbG51bShjKTsK
K30KKwogaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMpCiB7CiAgICAgcmV0
dXJuIHVfY2hhclR5cGUoYykgPT0gVV9TUEFDRV9TRVBBUkFUT1I7CkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTA5NDAp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisy
MDA5LTExLTEzICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNz
LWNvbXBhbnkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVuaWZ5IFRleHRCb3VuZGFyaWVzIGltcGxlbWVudGF0aW9ucyBieSBvbmx5IHJlbHlp
bmcgb24gV1RGIFVuaWNvZGUgYWJzdHJhY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTQ2OAorCisgICAgICAgIE1vdmluZyBUZXh0Qm91bmRh
cmllc0lDVS5jcHAgdG8gVGV4dEJvdW5kYXJpZXMuY3BwCisgICAgICAgIGJ5IHJlbW92aW5nIHRo
ZSBkaXJlY3QgSUNVIGRlcGVuZGVuY3kgYW5kIHJlcGxhY2luZyBpdAorICAgICAgICB3aXRoIFdU
RiBmdW5jdGlvbnMgYW5kIFdlYkNvcmUncyBvd24gVGV4dEJyZWFrSXRlcmF0b3IKKyAgICAgICAg
YWJzdHJhY3Rpb25zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpm
aW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFy
eSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dGV4dEJyZWFrTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQcmV2aW91
cyk6CisKIDIwMDktMTEtMTMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDUw
OTM3KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTYzNiw3
ICsxNjM2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nSW1wbC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5oIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEJvdW5kYXJpZXMuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1Uu
aCBcCkBAIC0yMDI4LDcgKzIwMjgsNiBAQCBpZiBVU0VfSUNVX1VOSUNPREUKIHdlYmNvcmVndGtf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAotCiBlbmRpZgogCiAjIC0tLS0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250
RGF0YUd0ay5jcHAJKHJldmlzaW9uIDUwOTM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw2
IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKICNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNs
dWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJp
ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vz
cy1jb21wYW55LmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
eHRCb3VuZGFyaWVzLmgiCisKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiVGV4
dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlIDxVbmljb2RlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGlu
dCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQoreworICAgIFRleHRCcmVha0l0ZXJh
dG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOworCisgICAgaWYgKGZvcndh
cmQpIHsKKyAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9u
KTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFRleHRCcmVha0RvbmUpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhlIGNoYXJhY3RlciBwcmVjZWVkaW5nIHRo
ZSBicmVhaworICAgICAgICAgICAgLy8gaXMgYWxwaGFudW1lcmljLgorICAgICAgICAgICAgaWYg
KHBvc2l0aW9uIDwgbGVuICYmIFdURjo6VW5pY29kZTo6aXNBbHBoYW51bWVyaWMoY2hhcnNbcG9z
aXRpb24gLSAxXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgICAg
ICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3NpdGlv
biA9IHRleHRCcmVha1ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9z
aXRpb24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hp
bmcgd2hlbiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8v
IGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgV1RGOjpV
bmljb2RlOjppc0FscGhhbnVtZXJpYyhjaGFyc1twb3NpdGlvbl0pKQorICAgICAgICAgICAgICAg
IHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtQcmVj
ZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxl
biwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKKyAgICAqZW5kID0g
dGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgaWYgKCplbmQgPCAwKQorICAg
ICAgICAqZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7CisgICAgKnN0YXJ0ID0gdGV4dEJyZWFrUHJl
dmlvdXMoaXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAJKHJldmlzaW9uIDUwOTM3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzSUNVLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgotCi0jaW5jbHVkZSA8dW5pY29kZS91YnJrLmg+
Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotCi0jaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgot
I2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
aW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGlu
dCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQotewotICAgIFVCcmVha0l0ZXJhdG9yKiBpdCA9IHdv
cmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOwotCi0gICAgaWYgKGZvcndhcmQpIHsKLSAgICAg
ICAgcG9zaXRpb24gPSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwotICAgICAgICB3aGls
ZSAocG9zaXRpb24gIT0gVUJSS19ET05FKSB7Ci0gICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJj
aGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgYnJlYWsKLSAgICAgICAgICAg
IC8vIGlzIGFscGhhbnVtZXJpYy4KLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiB1
X2lzYWxudW0oY2hhcnNbcG9zaXRpb24gLSAxXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uOwotCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfZm9sbG93aW5nKGl0LCBwb3Np
dGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbGVuOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHBvc2l0aW9uID0gdWJya19wcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKLSAgICAgICAg
d2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkgewotICAgICAgICAgICAgLy8gV2Ugc3RvcCBz
ZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgYnJlYWsKLSAgICAgICAg
ICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYg
dV9pc2FsbnVtKGNoYXJzW3Bvc2l0aW9uXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0
aW9uOwotCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHVicmtfcHJlY2VkaW5nKGl0LCBwb3NpdGlv
bik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXZvaWQgZmlu
ZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwg
aW50KiBzdGFydCwgaW50KiBlbmQpCi17Ci0gICAgVUJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJy
ZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7Ci0gICAgKmVuZCA9IHVicmtfZm9sbG93aW5nKGl0LCBw
b3NpdGlvbik7Ci0gICAgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kID0gdWJya19sYXN0KGl0
KTsKLSAgICAqc3RhcnQgPSB1YnJrX3ByZXZpb3VzKGl0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJ
KHJldmlzaW9uIDUwOTM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNo
YXIqLCBpbnQgbGVuZ3RoKTsKIAogICAgIGludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVy
YXRvciopOworICAgIGludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAg
aW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqKTsKKyAgICBpbnQgdGV4dEJyZWFr
UHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBpbnQgdGV4dEJyZWFrQ3VycmVudChU
ZXh0QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFr
SXRlcmF0b3IqLCBpbnQpOwogICAgIGludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRl
cmF0b3IqLCBpbnQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJh
dG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwCShyZXZpc2lvbiA1MDkzNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDExICs5MCwy
MSBAQCBpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpCiAgICAgcmV0dXJu
IHVicmtfZmlyc3QoYmkpOwogfQogCitpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRv
ciogYmkpCit7CisgICAgcmV0dXJuIHVicmtfbGFzdChiaSk7Cit9CisKIGludCB0ZXh0QnJlYWtO
ZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKIHsKICAgICByZXR1cm4gdWJya19uZXh0KGJpKTsK
IH0KIAoraW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAg
ICByZXR1cm4gdWJya19wcmV2aW91cyhiaSk7Cit9CisKIGludCB0ZXh0QnJlYWtQcmVjZWRpbmco
VGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQogewogICAgIHJldHVybiB1YnJrX3ByZWNl
ZGluZyhiaSwgcG9zKTsK
</data>
<flag name="review"
          id="24852"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43164</attachid>
            <date>2009-11-13 09:13:39 -0800</date>
            <delta_ts>2009-11-13 15:49:38 -0800</delta_ts>
            <desc>Refactoring TextBoundariesICU.cpp into generic TextBoundaries.cpp (v3)</desc>
            <filename>unify_TextBoundaries_v3.diff</filename>
            <type>text/plain</type>
            <size>12007</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwOTQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMTMgIERvbWluaWsg
UsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5pZnkgVGV4dEJv
dW5kYXJpZXMgaW1wbGVtZW50YXRpb25zIGJ5IG9ubHkgcmVseWluZyBvbiBXVEYgVW5pY29kZSBh
YnN0cmFjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMxNDY4CisKKyAgICAgICAgQWRkaW5nIGlzQWxwaGFudW1lcmljIGFic3RyYWN0aW9uLCBy
ZXF1aXJlZAorICAgICAgICBieSBUZXh0Qm91bmRhcmllcy5jcHAuCisKKyAgICAgICAgKiB3dGYv
dW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmg6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzQWxw
aGFudW1lcmljKToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9pY3UvVW5pY29kZUljdS5oOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjppc0FscGhhbnVtZXJpYyk6CisKIDIwMDktMTEtMTIgIFN0ZXZl
IFZhbkRlQm9nYXJ0ICA8dmFuZGVib0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5p
Y29kZUdMaWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGli
L1VuaWNvZGVHTGliLmgJKHJldmlzaW9uIDUwOTM3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUyLDEx
IEBAIGlubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCiAgICAgcmV0dXJuIGMgPj0g
MHgwNjAwICYmIGMgPD0gMHgwNkZGOwogfQogCitpbmxpbmUgYm9vbCBpc0FscGhhbnVtZXJpYyhV
Q2hhcjMyIGMpCit7CisgICAgcmV0dXJuIGdfdW5pY2hhcl9pc2FsbnVtKGMpOworfQorCiBpbmxp
bmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIzMiBjKQogewogICAgIHJldHVybiBnX3VuaWNoYXJf
dHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvaWN1L1VuaWNvZGVJY3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS9pY3UvVW5pY29kZUljdS5oCShyZXZpc2lvbiA1MDkzNykKKysrIEphdmFTY3JpcHRD
b3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2
ICsxNjQsMTEgQEAgaW5saW5lIGJvb2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKICAgICAgIHJl
dHVybiB1YmxvY2tfZ2V0Q29kZShjKSA9PSBVQkxPQ0tfQVJBQklDOwogfQogCitpbmxpbmUgYm9v
bCBpc0FscGhhbnVtZXJpYyhVQ2hhcjMyIGMpCit7CisgICAgcmV0dXJuIHVfaXNhbG51bShjKTsK
K30KKwogaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMpCiB7CiAgICAgcmV0
dXJuIHVfY2hhclR5cGUoYykgPT0gVV9TUEFDRV9TRVBBUkFUT1I7CkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTA5NDAp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisy
MDA5LTExLTEzICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNz
LWNvbXBhbnkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFVuaWZ5IFRleHRCb3VuZGFyaWVzIGltcGxlbWVudGF0aW9ucyBieSBvbmx5IHJlbHlp
bmcgb24gV1RGIFVuaWNvZGUgYWJzdHJhY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTQ2OAorCisgICAgICAgIE1vdmluZyBUZXh0Qm91bmRh
cmllc0lDVS5jcHAgdG8gVGV4dEJvdW5kYXJpZXMuY3BwCisgICAgICAgIGJ5IHJlbW92aW5nIHRo
ZSBkaXJlY3QgSUNVIGRlcGVuZGVuY3kgYW5kIHJlcGxhY2luZyBpdAorICAgICAgICB3aXRoIFdU
RiBmdW5jdGlvbnMgYW5kIFdlYkNvcmUncyBvd24gVGV4dEJyZWFrSXRlcmF0b3IKKyAgICAgICAg
YWJzdHJhY3Rpb25zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpm
aW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFy
eSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dGV4dEJyZWFrTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQcmV2aW91
cyk6CisKIDIwMDktMTEtMTMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDUw
OTM3KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTYzNiw3
ICsxNjM2LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nSW1wbC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5oIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEJvdW5kYXJpZXMuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1Uu
aCBcCkBAIC0yMDI4LDcgKzIwMjgsNiBAQCBpZiBVU0VfSUNVX1VOSUNPREUKIHdlYmNvcmVndGtf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAotCiBlbmRpZgogCiAjIC0tLS0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250
RGF0YUd0ay5jcHAJKHJldmlzaW9uIDUwOTM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw2
IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKICNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNs
dWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJp
ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFy
aWVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vz
cy1jb21wYW55LmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
eHRCb3VuZGFyaWVzLmgiCisKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiVGV4
dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlIDxVbmljb2RlLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwg
aW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0
ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisKKyAgICBpZiAoZm9yd2FyZCkgewor
ICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAg
ICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAgICAgICAgICAgLy8g
V2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIHByZWNlZWRpbmcgdGhlIGJyZWFr
CisgICAgICAgICAgICAvLyBpcyBhbHBoYW51bWVyaWMuCisgICAgICAgICAgICBpZiAocG9zaXRp
b24gPCBsZW4gJiYgaXNBbHBoYW51bWVyaWMoY2hhcnNbcG9zaXRpb24gLSAxXSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgICAgICAgICBwb3NpdGlvbiA9IHRleHRC
cmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha1ByZWNlZGlu
ZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9u
ZSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVy
IGZvbGxvd2luZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KKyAg
ICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgaXNBbHBoYW51bWVyaWMoY2hhcnNbcG9zaXRp
b25dKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAgICAgIHBv
c2l0aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25z
dCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBl
bmQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hh
cnMsIGxlbik7CisgICAgKmVuZCA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwor
ICAgIGlmICgqZW5kIDwgMCkKKyAgICAgICAgKmVuZCA9IHRleHRCcmVha0xhc3QoaXQpOworICAg
ICpzdGFydCA9IHRleHRCcmVha1ByZXZpb3VzKGl0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzSUNVLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3Bw
CShyZXZpc2lvbiA1MDkzNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmll
c0lDVS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKLQotI2lu
Y2x1ZGUgPHVuaWNvZGUvdWJyay5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLQotI2lu
Y2x1ZGUgIlN0cmluZ0ltcGwuaCIKLSNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNo
YXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKLXsKLSAgICBV
QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKLQotICAg
IGlmIChmb3J3YXJkKSB7Ci0gICAgICAgIHBvc2l0aW9uID0gdWJya19mb2xsb3dpbmcoaXQsIHBv
c2l0aW9uKTsKLSAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFVCUktfRE9ORSkgewotICAgICAg
ICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIHByZWNlZWRpbmcg
dGhlIGJyZWFrCi0gICAgICAgICAgICAvLyBpcyBhbHBoYW51bWVyaWMuCi0gICAgICAgICAgICBp
ZiAocG9zaXRpb24gPCBsZW4gJiYgdV9pc2FsbnVtKGNoYXJzW3Bvc2l0aW9uIC0gMV0pKQotICAg
ICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAgICAgICAgICAgcG9zaXRpb24gPSB1
YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IGxlbjsKLSAgICB9IGVsc2UgewotICAgICAgICBwb3NpdGlvbiA9IHVicmtfcHJlY2VkaW5nKGl0
LCBwb3NpdGlvbik7Ci0gICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBVQlJLX0RPTkUpIHsKLSAg
ICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhlIGNoYXJhY3RlciBmb2xsb3dp
bmcgdGhlIGJyZWFrCi0gICAgICAgICAgICAvLyBpcyBhbHBoYW51bWVyaWMuCi0gICAgICAgICAg
ICBpZiAocG9zaXRpb24gPiAwICYmIHVfaXNhbG51bShjaGFyc1twb3NpdGlvbl0pKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKLQotICAgICAgICAgICAgcG9zaXRpb24gPSB1YnJr
X3ByZWNlZGluZyhpdCwgcG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotfQotCi12b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJzLCBp
bnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQotewotICAgIFVCcmVh
a0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4pOwotICAgICplbmQg
PSB1YnJrX2ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOwotICAgIGlmICgqZW5kIDwgMCkKLSAgICAg
ICAgKmVuZCA9IHVicmtfbGFzdChpdCk7Ci0gICAgKnN0YXJ0ID0gdWJya19wcmV2aW91cyhpdCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0QnJlYWtJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiA1MDkzNykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBUZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VC
cmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAKICAgICBpbnQgdGV4dEJy
ZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqKTsKKyAgICBpbnQgdGV4dEJyZWFrTGFzdChUZXh0
QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9y
Kik7CisgICAgaW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAg
aW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBpbnQgdGV4dEJy
ZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50KTsKICAgICBpbnQgdGV4dEJyZWFr
Rm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkocmV2aXNpb24gNTA5MzcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MCwxMSArOTAsMjEgQEAgaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVha0l0
ZXJhdG9yKiBiaQogICAgIHJldHVybiB1YnJrX2ZpcnN0KGJpKTsKIH0KIAoraW50IHRleHRCcmVh
a0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIHJldHVybiB1YnJrX2xhc3QoYmkp
OworfQorCiBpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogYmkpCiB7CiAgICAg
cmV0dXJuIHVicmtfbmV4dChiaSk7CiB9CiAKK2ludCB0ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJl
YWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIHVicmtfcHJldmlvdXMoYmkpOworfQorCiBp
bnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKIHsK
ICAgICByZXR1cm4gdWJya19wcmVjZWRpbmcoYmksIHBvcyk7Cg==
</data>
<flag name="review"
          id="24878"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="24857"
          type_id="3"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>