<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[236821] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/236821">236821</a></dd>
<dt>Author</dt> <dd>youenn@apple.com</dd>
<dt>Date</dt> <dd>2018-10-03 18:53:27 -0700 (Wed, 03 Oct 2018)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add VP8 support to WebRTC
https://bugs.webkit.org/show_bug.cgi?id=189976

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

* web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt:

Source/ThirdParty/libwebrtc:

Add support for conditional VP8 support for both encoding and decoding.
This boolean is used by WebCore based on the new VP8 runtime flag.

Enable yasm compilation as a dependency of libvpx.

Compilation is done without using SSE4/AVX2 optimizations.

* Configurations/libvpx.xcconfig: Added.
* Configurations/libwebrtc.iOS.exp:
* Configurations/libwebrtc.iOSsim.exp:
* Configurations/libwebrtc.mac.exp:
* Configurations/libwebrtc.xcconfig:
* Configurations/libwebrtcpcrtc.xcconfig:
* Source/third_party/libvpx/run_yasm_webkit.py: Added.
* Source/third_party/libvpx/source/config/mac/x64/vpx_config.asm:
* Source/third_party/libvpx/source/config/mac/x64/vpx_config.h:
* Source/third_party/libvpx/source/config/mac/x64/vpx_dsp_rtcd.h:
* Source/webrtc/sdk/WebKit/WebKitUtilities.h:
* Source/webrtc/sdk/WebKit/WebKitUtilities.mm:
(webrtc::createWebKitEncoderFactory):
(webrtc::createWebKitDecoderFactory):
* Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h:
* libwebrtc.xcodeproj/project.pbxproj:

Source/WebCore:

Add a runtime flag to control activation of VP8 codec.
Bind this runtime flag to the video codec factories.
Test: webrtc/video-mute-vp8.html

* Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
(WebCore::createLibWebRTCPeerConnectionBackend):
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::webRTCVP8CodecEnabled const):
(WebCore::RuntimeEnabledFeatures::setWebRTCVP8CodecEnabled):
* platform/mediastream/libwebrtc/LibWebRTCProvider.h:
* platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
(WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
(WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
* testing/Internals.cpp:
(WebCore::Internals::resetToConsistentState):
Enable VP8 codec for tests.

Source/WebKit:

* Shared/WebPreferences.yaml:

LayoutTests:

* webrtc/audio-peer-connection-g722.html:
* webrtc/routines.js:
* webrtc/video-mute-vp8-expected.txt: Added.
* webrtc/video-mute-vp8.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCPeerConnectionaddIceCandidateexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt</a></li>
<li><a href="#trunkLayoutTestswebrtcaudiopeerconnectiong722html">trunk/LayoutTests/webrtc/audio-peer-connection-g722.html</a></li>
<li><a href="#trunkLayoutTestswebrtcroutinesjs">trunk/LayoutTests/webrtc/routines.js</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcChangeLog">trunk/Source/ThirdParty/libwebrtc/ChangeLog</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSexp">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSsimexp">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcmacexp">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcxcconfig">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcpcrtcxcconfig">trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtcpcrtc.xcconfig</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vp8_rtcdh">trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vp8_rtcd.h</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vpx_configasm">trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.asm</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vpx_configh">trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.h</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vpx_dsp_rtcdh">trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_dsp_rtcd.h</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcewebrtcsdkWebKitWebKitUtilitiesh">trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcewebrtcsdkWebKitWebKitUtilitiesmm">trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcewebrtcsdkobjcFrameworkClassesPeerConnectionRTCDefaultVideoDecoderFactorymm">trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.mm</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcewebrtcsdkobjcFrameworkClassesPeerConnectionRTCDefaultVideoEncoderFactorymm">trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.mm</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtclibwebrtcxcodeprojprojectpbxproj">trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCPeerConnectionBackendcpp">trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp</a></li>
<li><a href="#trunkSourceWebCorepageRuntimeEnabledFeaturesh">trunk/Source/WebCore/page/RuntimeEnabledFeatures.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamlibwebrtcLibWebRTCProviderh">trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h</a></li>
<li><a href="#trunkSourceWebCoreplatformmediastreamlibwebrtcLibWebRTCProviderCocoacpp">trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitSharedWebPreferencesyaml">trunk/Source/WebKit/Shared/WebPreferences.yaml</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestswebrtcvideomutevp8expectedtxt">trunk/LayoutTests/webrtc/video-mute-vp8-expected.txt</a></li>
<li><a href="#trunkLayoutTestswebrtcvideomutevp8html">trunk/LayoutTests/webrtc/video-mute-vp8.html</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcConfigurationslibvpxxcconfig">trunk/Source/ThirdParty/libwebrtc/Configurations/libvpx.xcconfig</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partyyasm130libyasmbitvectc">trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.c</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partyyasm130libyasmbitvecth">trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourcelibvpxgitignore">trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/libvpx/.gitignore</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcethird_partyyasm130GNU_LGPL20">trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/GNU_LGPL-2.0</a></li>
<li><a href="#trunkSourceThirdPartylibwebrtcSourcewebrtcmodulesvideo_codingcodecsvp8vp8_noopcc">trunk/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/LayoutTests/ChangeLog 2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2018-10-03  Youenn Fablet  <youenn@apple.com>
+
+        Add VP8 support to WebRTC
+        https://bugs.webkit.org/show_bug.cgi?id=189976
+
+        Reviewed by Eric Carlson.
+
+        * webrtc/audio-peer-connection-g722.html:
+        * webrtc/routines.js:
+        * webrtc/video-mute-vp8-expected.txt: Added.
+        * webrtc/video-mute-vp8.html: Added.
+
</ins><span class="cx"> 2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [WebCrypto] ECDSA could not deal with invalid signature inputs
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog 2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/LayoutTests/imported/w3c/ChangeLog    2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2018-10-03  Youenn Fablet  <youenn@apple.com>
+
+        Add VP8 support to WebRTC
+        https://bugs.webkit.org/show_bug.cgi?id=189976
+
+        Reviewed by Eric Carlson.
+
+        * web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt:
+
</ins><span class="cx"> 2018-10-03  Chris Dumez  <cdumez@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Passing noopener=NOOPENER to window.open() should cause the new window to not have an opener
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestswebrtcRTCPeerConnectionaddIceCandidateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt  2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt     2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,25 +1,25 @@
</span><span class="cx"> 
</span><del>-FAIL Add null candidate should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
</del><ins>+FAIL Add null candidate should reject with TypeError assert_unreached: Should have rejected: undefined Reached unreachable code
</ins><span class="cx"> FAIL Add ICE candidate before setting remote description should reject with InvalidStateError assert_unreached: Should have rejected: undefined Reached unreachable code
</span><del>-FAIL Add ICE candidate after setting remote description should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add ICE candidate with RTCIceCandidate should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with only valid sdpMid should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with only valid sdpMLineIndex should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL addIceCandidate with first sdpMid and sdpMLineIndex add candidate to first media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL addIceCandidate with second sdpMid and sdpMLineIndex should add candidate to second media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate for first media stream with null ufrag should add candidate to first media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Adding multiple candidates should add candidates to their corresponding media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add with empty candidate string (end of candidate) should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with both sdpMid and sdpMLineIndex manually set to null should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with only valid candidate string should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with invalid candidate string and both sdpMid and sdpMLineIndex null should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with empty dict should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with manually filled default values should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with invalid sdpMid should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with invalid sdpMLineIndex should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Invalid sdpMLineIndex should be ignored if valid sdpMid is provided promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate for media stream 2 with null ufrag should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with invalid ufrag should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with invalid candidate string should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
-FAIL Add candidate with sdpMid belonging to different ufrag should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters."
</del><ins>+PASS Add ICE candidate after setting remote description should succeed 
+PASS Add ICE candidate with RTCIceCandidate should succeed 
+FAIL Add candidate with only valid sdpMid should succeed promise_test: Unhandled rejection with value: object "OperationError: Expect line: candidate:<candidate-str>"
+FAIL Add candidate with only valid sdpMLineIndex should succeed promise_test: Unhandled rejection with value: object "OperationError: Expect line: candidate:<candidate-str>"
+FAIL addIceCandidate with first sdpMid and sdpMLineIndex add candidate to first media stream assert_true: Expect candidate line to be found between media lines m=audio and m=video expected true got false
+FAIL addIceCandidate with second sdpMid and sdpMLineIndex should add candidate to second media stream assert_true: Expect candidate line to be found after media line m=video expected true got false
+FAIL Add candidate for first media stream with null ufrag should add candidate to first media stream assert_true: Expect candidate line to be found between media lines m=audio and m=video expected true got false
+FAIL Adding multiple candidates should add candidates to their corresponding media stream assert_true: Expect candidate line to be found between media lines m=audio and m=video expected true got false
+FAIL Add with empty candidate string (end of candidate) should succeed promise_test: Unhandled rejection with value: object "OperationError: Expect line: candidate:<candidate-str>"
+PASS Add candidate with both sdpMid and sdpMLineIndex manually set to null should reject with TypeError 
+PASS Add candidate with only valid candidate string should reject with TypeError 
+PASS Add candidate with invalid candidate string and both sdpMid and sdpMLineIndex null should reject with TypeError 
+PASS Add candidate with empty dict should reject with TypeError 
+PASS Add candidate with manually filled default values should reject with TypeError 
+FAIL Add candidate with invalid sdpMid should reject with OperationError assert_unreached: Should have rejected: undefined Reached unreachable code
+FAIL Add candidate with invalid sdpMLineIndex should reject with OperationError assert_unreached: Should have rejected: undefined Reached unreachable code
+PASS Invalid sdpMLineIndex should be ignored if valid sdpMid is provided 
+FAIL Add candidate for media stream 2 with null ufrag should succeed assert_true: Expect candidate line to be found after media line m=video expected true got false
+FAIL Add candidate with invalid ufrag should reject with OperationError assert_unreached: Should have rejected: undefined Reached unreachable code
+PASS Add candidate with invalid candidate string should reject with OperationError 
+FAIL Add candidate with sdpMid belonging to different ufrag should reject with OperationError assert_unreached: Should have rejected: undefined Reached unreachable code
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestswebrtcaudiopeerconnectiong722html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/webrtc/audio-peer-connection-g722.html (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/webrtc/audio-peer-connection-g722.html 2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/LayoutTests/webrtc/audio-peer-connection-g722.html    2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -32,13 +32,6 @@
</span><span class="cx">     return results;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function setCodec(sdp, codec)
-{
-    return sdp.split('\r\n').filter(line => {
-        return line.indexOf('a=fmtp') === -1 && line.indexOf('a=rtcp-fb') === -1 && (line.indexOf('a=rtpmap') === -1 || line.indexOf(codec) !== -1);
-    }).join('\r\n');
-}
-
</del><span class="cx"> promise_test(async (test) => {
</span><span class="cx">     if (window.testRunner)
</span><span class="cx">         testRunner.setUserMediaPermission(true);
</span></span></pre></div>
<a id="trunkLayoutTestswebrtcroutinesjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/webrtc/routines.js (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/webrtc/routines.js     2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/LayoutTests/webrtc/routines.js        2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -204,3 +204,10 @@
</span><span class="cx">     await waitFor(50);
</span><span class="cx">     return checkVideoBlack(expected, canvas, video, errorMessage, ++counter);
</span><span class="cx"> }
</span><ins>+
+function setCodec(sdp, codec)
+{
+    return sdp.split('\r\n').filter(line => {
+        return line.indexOf('a=fmtp') === -1 && line.indexOf('a=rtcp-fb') === -1 && (line.indexOf('a=rtpmap') === -1 || line.indexOf(codec) !== -1);
+    }).join('\r\n');
+}
</ins></span></pre></div>
<a id="trunkLayoutTestswebrtcvideomutevp8expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/webrtc/video-mute-vp8-expected.txt (0 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/webrtc/video-mute-vp8-expected.txt                             (rev 0)
+++ trunk/LayoutTests/webrtc/video-mute-vp8-expected.txt        2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+Video should be running, go to black and running.
+Following, should be a snapshot of the video, a black frame and a snapshot of the video.
+  
+
+PASS Setting video exchange 
+PASS Ensuring connection state is connected 
+PASS Track is enabled, video should not be black 
+PASS Track is disabled, video should be black 
+PASS If disabled, black frames should still be coming 
+PASS Track is enabled, video should not be black 
+
</ins></span></pre></div>
<a id="trunkLayoutTestswebrtcvideomutevp8html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/webrtc/video-mute-vp8.html (0 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/webrtc/video-mute-vp8.html                             (rev 0)
+++ trunk/LayoutTests/webrtc/video-mute-vp8.html        2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -0,0 +1,112 @@
</span><ins>+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Testing muting video</title>
+        <script src="../resources/testharness.js"></script>
+        <script src="../resources/testharnessreport.js"></script>
+    </head>
+    <body>
+        <div>Video should be running, go to black and running.</div>
+        <div>Following, should be a snapshot of the video, a black frame and a snapshot of the video.</div>
+        <video id="video" autoplay playsInline width="320" height="240"></video>
+        <canvas id="canvas1" width="320" height="240"></canvas>
+        <canvas id="canvas2" width="320" height="240"></canvas>
+        <canvas id="canvas3" width="320" height="240"></canvas>
+        <script src ="routines.js"></script>
+        <script>
+var track;
+var remoteTrack;
+var receivingConnection;
+promise_test((test) => {
+    if (window.testRunner)
+        testRunner.setUserMediaPermission(true);
+
+    return navigator.mediaDevices.getUserMedia({video: {width: 320, height: 240, facingMode: "environment"}}).then((localStream) => {
+        return new Promise((resolve, reject) => {
+            track = localStream.getVideoTracks()[0];
+
+            createConnections((firstConnection) => {
+                firstConnection.addTrack(track, localStream);
+            }, (secondConnection) => {
+                receivingConnection = secondConnection;
+                secondConnection.ontrack = (trackEvent) => {
+                    remoteTrack = trackEvent.track;
+                    resolve(trackEvent.streams[0]);
+                };
+            }, { observeOffer : (offer) => {
+                offer.sdp = setCodec(offer.sdp, "VP8");
+                return offer;
+            }
+            });
+            setTimeout(() => reject("Test timed out"), 5000);
+        });
+    }).then((remoteStream) => {
+        video.srcObject = remoteStream;
+        return video.play();
+    });
+}, "Setting video exchange");
+
+promise_test(() => {
+    if (receivingConnection.connectionState === "connected")
+        return Promise.resolve();
+    return new Promise((resolve, reject) => {
+        receivingConnection.onconnectionstatechange = () => {
+            if (receivingConnection.connectionState === "connected")
+                resolve();
+        };
+        setTimeout(() => reject("Test timed out"), 5000);
+    });
+}, "Ensuring connection state is connected");
+
+promise_test((test) => {
+    return checkVideoBlack(false, canvas1, video);
+}, "Track is enabled, video should not be black");
+
+promise_test((test) => {
+    track.enabled = false;
+    return checkVideoBlack(true, canvas2, video);
+}, "Track is disabled, video should be black");
+
+async function getInboundRTPStatsNumberOfDecodedFrames(connection)
+{
+    var report = await connection.getStats();
+    var framesDecoded;
+    report.forEach((statItem) => {
+        if (statItem.type === "inbound-rtp")
+            framesDecoded = statItem.framesDecoded;
+    });
+    return framesDecoded;
+}
+
+async function testFrameDecodedIncreased(connection, count, previousFramesNumber)
+{
+    if (previousFramesNumber === undefined) {
+        let number = await getInboundRTPStatsNumberOfDecodedFrames(connection);
+        await waitFor(1000);
+        return testFrameDecodedIncreased(connection, 0, number);
+    }
+
+    var number = await getInboundRTPStatsNumberOfDecodedFrames(connection);
+    if (previousFramesNumber && number > previousFramesNumber)
+        return;
+
+    if (count >= 20)
+        return Promise.reject("test increasing frame encoded timed out");
+
+    await waitFor(1000);
+    return testFrameDecodedIncreased(connection, ++count, previousFramesNumber);
+}
+
+promise_test((test) => {
+    return testFrameDecodedIncreased(receivingConnection);
+}, "If disabled, black frames should still be coming");
+
+promise_test((test) => {
+    track.enabled = true;
+    return checkVideoBlack(false, canvas2, video);
+}, "Track is enabled, video should not be black");
+
+        </script>
+    </body>
+</html>
</ins></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/ChangeLog      2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog 2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2018-10-03  Youenn Fablet  <youenn@apple.com>
+
+        Add VP8 support to WebRTC
+        https://bugs.webkit.org/show_bug.cgi?id=189976
+
+        Reviewed by Eric Carlson.
+
+        Add support for conditional VP8 support for both encoding and decoding.
+        This boolean is used by WebCore based on the new VP8 runtime flag.
+
+        Enable yasm compilation as a dependency of libvpx.
+
+        Compilation is done without using SSE4/AVX2 optimizations.
+
+        * Configurations/libvpx.xcconfig: Added.
+        * Configurations/libwebrtc.iOS.exp:
+        * Configurations/libwebrtc.iOSsim.exp:
+        * Configurations/libwebrtc.mac.exp:
+        * Configurations/libwebrtc.xcconfig:
+        * Configurations/libwebrtcpcrtc.xcconfig:
+        * Source/third_party/libvpx/run_yasm_webkit.py: Added.
+        * Source/third_party/libvpx/source/config/mac/x64/vpx_config.asm:
+        * Source/third_party/libvpx/source/config/mac/x64/vpx_config.h:
+        * Source/third_party/libvpx/source/config/mac/x64/vpx_dsp_rtcd.h:
+        * Source/webrtc/sdk/WebKit/WebKitUtilities.h:
+        * Source/webrtc/sdk/WebKit/WebKitUtilities.mm:
+        (webrtc::createWebKitEncoderFactory):
+        (webrtc::createWebKitDecoderFactory):
+        * Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h:
+        * libwebrtc.xcodeproj/project.pbxproj:
+
</ins><span class="cx"> 2018-10-03  Dan Bernstein  <mitz@apple.com>
</span><span class="cx"> 
</span><span class="cx">         libwebrtc part of [Xcode] Update some build settings as recommended by Xcode 10
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibvpxxcconfig"></a>
<div class="addfile"><h4>Added: trunk/Source/ThirdParty/libwebrtc/Configurations/libvpx.xcconfig (0 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libvpx.xcconfig                         (rev 0)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libvpx.xcconfig    2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+PRODUCT_NAME = vpx;
+
+CLANG_WARN_BOOL_CONVERSION = YES;
+CLANG_WARN_ENUM_CONVERSION = YES;
+CLANG_WARN_INT_CONVERSION = YES;
+GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+COMBINE_HIDPI_IMAGES = NO;
+ENABLE_STRICT_OBJC_MSGSEND = YES;
+
+HEADER_SEARCH_PATHS[sdk=macos*] = Source/third_party/libvpx/source/config/mac/x64 Source/third_party/libvpx/source/libvpx Source/third_party/libvpx/source/config;
+HEADER_SEARCH_PATHS[sdk=iphonesimulator*] = Source/third_party/libvpx/source/config/mac/x64 Source/third_party/libvpx/source/libvpx Source/third_party/libvpx/source/config;
+HEADER_SEARCH_PATHS[sdk=iphoneos*] = Source/third_party/libvpx/source/config/ios/arm64 Source/third_party/libvpx/source/libvpx Source/third_party/libvpx/source/config;
+
+INSTALL_PATH = /usr/local/lib;
+PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/libwebrtc;
+USE_HEADERMAP = NO;
+
+EXCLUDED_SOURCE_FILE_NAMES[sdk=macos*] = *_neon.c arm_cpudetect.c *_arm.c sad.c
+EXCLUDED_SOURCE_FILE_NAMES[sdk=iphonesimulator*] = *_neon.c arm_cpudetect.c *_arm.c sad.c
+EXCLUDED_SOURCE_FILE_NAMES[sdk=iphoneos*] = *_sse2.c *_ssse3.c *_sse4.c *_avx2.c *_avx.c *.asm
</ins></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSexp"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp       2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp  2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -105,8 +105,8 @@
</span><span class="cx"> __ZN6webrtc27SessionDescriptionInterface16RemoveCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE
</span><span class="cx"> __ZNK6webrtc21IceCandidateInterface10server_urlEv
</span><span class="cx"> __ZN6webrtc20setApplicationStatusEb
</span><del>-__ZN6webrtc26createWebKitDecoderFactoryEv
-__ZN6webrtc26createWebKitEncoderFactoryEv
</del><ins>+__ZN6webrtc26createWebKitDecoderFactoryENS_18WebKitCodecSupportE
+__ZN6webrtc26createWebKitEncoderFactoryENS_18WebKitCodecSupportE
</ins><span class="cx"> __ZN6webrtc29setH264HardwareEncoderAllowedEb
</span><span class="cx"> __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameERKNSt3__18functionIFP10__CVBuffermmEEE
</span><span class="cx"> __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtciOSsimexp"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp    2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp       2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -105,8 +105,8 @@
</span><span class="cx"> __ZN6webrtc27SessionDescriptionInterface16RemoveCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE
</span><span class="cx"> __ZNK6webrtc21IceCandidateInterface10server_urlEv
</span><span class="cx"> __ZN6webrtc20setApplicationStatusEb
</span><del>-__ZN6webrtc26createWebKitDecoderFactoryEv
-__ZN6webrtc26createWebKitEncoderFactoryEv
</del><ins>+__ZN6webrtc26createWebKitDecoderFactoryENS_18WebKitCodecSupportE
+__ZN6webrtc26createWebKitEncoderFactoryENS_18WebKitCodecSupportE
</ins><span class="cx"> __ZN6webrtc29setH264HardwareEncoderAllowedEb
</span><span class="cx"> __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameERKNSt3__18functionIFP10__CVBuffermmEEE
</span><span class="cx"> __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcmacexp"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp       2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp  2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -105,8 +105,8 @@
</span><span class="cx"> __ZN6webrtc27SessionDescriptionInterface16RemoveCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE
</span><span class="cx"> __ZNK6webrtc21IceCandidateInterface10server_urlEv
</span><span class="cx"> __ZN6webrtc20setApplicationStatusEb
</span><del>-__ZN6webrtc26createWebKitDecoderFactoryEv
-__ZN6webrtc26createWebKitEncoderFactoryEv
</del><ins>+__ZN6webrtc26createWebKitDecoderFactoryENS_18WebKitCodecSupportE
+__ZN6webrtc26createWebKitEncoderFactoryENS_18WebKitCodecSupportE
</ins><span class="cx"> __ZN6webrtc29setH264HardwareEncoderAllowedEb
</span><span class="cx"> __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameERKNSt3__18functionIFP10__CVBuffermmEEE
</span><span class="cx"> __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig      2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig 2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -18,7 +18,7 @@
</span><span class="cx"> DYLIB_INSTALL_NAME_BASE_WK_RELOCATABLE_FRAMEWORKS_YES = @loader_path/../../../;
</span><span class="cx"> 
</span><span class="cx"> GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
</span><del>-HEADER_SEARCH_PATHS = Source Source/third_party/jsoncpp/source/include Source/third_party/libsrtp/crypto/include Source/third_party/libsrtp/include Source/third_party/boringssl/src/include Source/third_party/libyuv/include Source/third_party/usrsctp/usrsctplib Source/third_party/usrsctp/usrsctplib/usrsctplib Source/webrtc/sdk/objc/Framework/Headers Source/webrtc/common_audio/signal_processing/include Source/webrtc/modules/audio_coding/codecs/isac/main/include Source/third_party/opus/src/celt Source/third_party/opus/src/include Source/third_party/opus/src/src Source/webrtc/modules/audio_device/mac Source/third_party/usrsctp/usrsctplib/usrsctplib/netinet Source/webrtc/modules/audio_device/ios;
</del><ins>+HEADER_SEARCH_PATHS = Source Source/third_party/jsoncpp/source/include Source/third_party/libsrtp/crypto/include Source/third_party/libsrtp/include Source/third_party/boringssl/src/include Source/third_party/libyuv/include Source/third_party/usrsctp Source/third_party/usrsctp/usrsctplib Source/third_party/usrsctp/usrsctplib/usrsctplib Source/webrtc/sdk/objc/Framework/Headers Source/webrtc/common_audio/signal_processing/include Source/webrtc/modules/audio_coding/codecs/isac/main/include Source/third_party/opus/src/celt Source/third_party/opus/src/include Source/third_party/opus/src/src Source/webrtc/modules/audio_device/mac Source/third_party/usrsctp/usrsctplib/usrsctplib/netinet Source/webrtc/modules/audio_device/ios Source/webrtc Source/webrtc/sdk/objc/Framework/Classes Source/third_party/libsrtp/config Source/webrtc/sdk/objc/Framework/Classes/Common Source/webrtc/sdk/objc/Framework/Classes/Video Source/webrtc/sdk/objc/Framework/Classes/PeerConnection Source/third_party/
 abseil-cpp Source/third_party/libvpx/source/libvpx;
</ins><span class="cx"> 
</span><span class="cx"> PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/libwebrtc;
</span><span class="cx"> USE_HEADERMAP = NO;
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> WARNING_CFLAGS = -Wno-deprecated-declarations $(inherited);
</span><span class="cx"> 
</span><span class="cx"> // FIXME: Set WEBRTC_USE_BUILTIN_ISAC_FIX and WEBRTC_USE_BUILTIN_ISAC_FLOAT for iOS and Mac
</span><del>-GCC_PREPROCESSOR_DEFINITIONS = GTEST_RELATIVE_PATH WEBRTC_OPUS_SUPPORT_120MS_PTIME=0 WEBRTC_POSIX WEBRTC_MAC SSL_USE_OPENSSL FEATURE_ENABLE_SSL HAVE_SRTP HAVE_OPENSSL_SSL_H SCTP_PROCESS_LEVEL_LOCKS SCTP_SIMPLE_ALLOCATOR SCTP_USE_OPENSSL_SHA1 __Userspace__ HAVE_SA_LEN HAVE_SCONN_LEN __APPLE_USE_RFC_2292 __Userspace_os_Darwin NON_WINDOWS_DEFINE HAVE_WEBRTC_VIDEO HAVE_WEBRTC_VOICE WEBRTC_INTELLIGIBILITY_ENHANCER=0 WEBRTC_APM_DEBUG_DUMP=0 WEBRTC_NS_FLOAT WEBRTC_USE_BUILTIN_ILBC WEBRTC_CODEC_ILBC WEBRTC_USE_BUILTIN_OPUS WEBRTC_CODEC_OPUS WEBRTC_CODEC_ISAC WEBRTC_CODEC_RED RTC_DISABLE_VP9 RTC_DISABLE_VP8 HAVE_STDINT_H HAVE_STDLIB_H HAVE_UINT64_T OPENSSL HAVE_CONFIG_H WEBRTC_WEBKIT_BUILD HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE  HAVE_SCTP WEBRTC_CODEC_G711 WEBRTC_CODEC_G722 WEBRTC_OPUS_VARIABLE_COMPLEXITY=0 WEBRTC_USE_BUILTIN_ISAC_FIX=1 WEBRTC_USE_BUILTIN_ISAC_FLOAT=0 USE_BUILTIN_SW_CODECS $(inherited);
</del><ins>+GCC_PREPROCESSOR_DEFINITIONS = GTEST_RELATIVE_PATH WEBRTC_OPUS_SUPPORT_120MS_PTIME=0 WEBRTC_POSIX WEBRTC_MAC SSL_USE_OPENSSL FEATURE_ENABLE_SSL HAVE_SRTP HAVE_OPENSSL_SSL_H SCTP_PROCESS_LEVEL_LOCKS SCTP_SIMPLE_ALLOCATOR SCTP_USE_OPENSSL_SHA1 __Userspace__ HAVE_SA_LEN HAVE_SCONN_LEN __APPLE_USE_RFC_2292 __Userspace_os_Darwin NON_WINDOWS_DEFINE HAVE_WEBRTC_VIDEO HAVE_WEBRTC_VOICE WEBRTC_INTELLIGIBILITY_ENHANCER=0 WEBRTC_APM_DEBUG_DUMP=0 WEBRTC_NS_FLOAT WEBRTC_USE_BUILTIN_ILBC WEBRTC_CODEC_ILBC WEBRTC_USE_BUILTIN_OPUS WEBRTC_CODEC_OPUS WEBRTC_CODEC_ISAC WEBRTC_CODEC_RED RTC_DISABLE_VP9 HAVE_STDINT_H HAVE_STDLIB_H HAVE_UINT64_T OPENSSL HAVE_CONFIG_H WEBRTC_WEBKIT_BUILD HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE  HAVE_SCTP WEBRTC_CODEC_G711 WEBRTC_CODEC_G722 WEBRTC_OPUS_VARIABLE_COMPLEXITY=0 WEBRTC_USE_BUILTIN_ISAC_FIX=1 WEBRTC_USE_BUILTIN_ISAC_FLOAT=0 USE_BUILTIN_SW_CODECS $(inherited);
</ins><span class="cx"> 
</span><span class="cx"> GCC_PREPROCESSOR_DEFINITIONS[sdk=macosx*] = $(inherited) WEBRTC_USE_VTB_HARDWARE_ENCODER;
</span><span class="cx"> GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*] = $(inherited) WEBRTC_IOS;
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcConfigurationslibwebrtcpcrtcxcconfig"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtcpcrtc.xcconfig (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtcpcrtc.xcconfig 2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtcpcrtc.xcconfig    2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx"> PUBLIC_HEADERS_FOLDER_PATH = /usr/local/include/libwebrtc;
</span><span class="cx"> USE_HEADERMAP = NO;
</span><span class="cx"> 
</span><del>-GCC_PREPROCESSOR_DEFINITIONS = WEBRTC_POSIX WEBRTC_MAC SSL_USE_OPENSSL FEATURE_ENABLE_SSL HAVE_SRTP HAVE_OPENSSL_SSL_H SCTP_PROCESS_LEVEL_LOCKS SCTP_SIMPLE_ALLOCATOR SCTP_USE_OPENSSL_SHA1 __Userspace__ HAVE_SA_LEN HAVE_SCONN_LEN __APPLE_USE_RFC_2292 __Userspace_os_Darwin NON_WINDOWS_DEFINE HAVE_WEBRTC_VIDEO HAVE_WEBRTC_VOICE WEBRTC_INTELLIGIBILITY_ENHANCER=0 WEBRTC_APM_DEBUG_DUMP=0 WEBRTC_NS_FLOAT WEBRTC_USE_BUILTIN_ILBC WEBRTC_CODEC_ILBC WEBRTC_USE_BUILTIN_OPUS WEBRTC_CODEC_OPUS WEBRTC_CODEC_ISAC WEBRTC_CODEC_RED RTC_DISABLE_VP9 RTC_DISABLE_VP8 HAVE_STDINT_H HAVE_STDLIB_H HAVE_UINT64_T OPENSSL HAVE_CONFIG_H WEBRTC_WEBKIT_BUILD HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE  HAVE_SCTP $(inherited);
</del><ins>+GCC_PREPROCESSOR_DEFINITIONS = WEBRTC_POSIX WEBRTC_MAC SSL_USE_OPENSSL FEATURE_ENABLE_SSL HAVE_SRTP HAVE_OPENSSL_SSL_H SCTP_PROCESS_LEVEL_LOCKS SCTP_SIMPLE_ALLOCATOR SCTP_USE_OPENSSL_SHA1 __Userspace__ HAVE_SA_LEN HAVE_SCONN_LEN __APPLE_USE_RFC_2292 __Userspace_os_Darwin NON_WINDOWS_DEFINE HAVE_WEBRTC_VIDEO HAVE_WEBRTC_VOICE WEBRTC_INTELLIGIBILITY_ENHANCER=0 WEBRTC_APM_DEBUG_DUMP=0 WEBRTC_NS_FLOAT WEBRTC_USE_BUILTIN_ILBC WEBRTC_CODEC_ILBC WEBRTC_USE_BUILTIN_OPUS WEBRTC_CODEC_OPUS WEBRTC_CODEC_ISAC WEBRTC_CODEC_RED RTC_DISABLE_VP9 HAVE_STDINT_H HAVE_STDLIB_H HAVE_UINT64_T OPENSSL HAVE_CONFIG_H WEBRTC_WEBKIT_BUILD HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE  HAVE_SCTP $(inherited);
</ins><span class="cx"> 
</span><span class="cx"> GCC_PREPROCESSOR_DEFINITIONS[sdk=macosx*] = $(inherited);
</span><span class="cx"> GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*] = $(inherited) WEBRTC_IOS;
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vp8_rtcdh"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vp8_rtcd.h (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vp8_rtcd.h     2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vp8_rtcd.h        2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -651,11 +651,7 @@
</span><span class="cx">   vp8_full_search_sad = vp8_full_search_sad_c;
</span><span class="cx">   if (flags & HAS_SSE3)
</span><span class="cx">     vp8_full_search_sad = vp8_full_search_sadx3;
</span><del>-  if (flags & HAS_SSE4_1)
-    vp8_full_search_sad = vp8_full_search_sadx8;
</del><span class="cx">   vp8_regular_quantize_b = vp8_regular_quantize_b_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vp8_regular_quantize_b = vp8_regular_quantize_b_sse4_1;
</del><span class="cx">   vp8_sixtap_predict16x16 = vp8_sixtap_predict16x16_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vp8_sixtap_predict16x16 = vp8_sixtap_predict16x16_ssse3;
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vpx_configasm"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.asm (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.asm 2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.asm    2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -72,6 +72,7 @@
</span><span class="cx"> %define CONFIG_MULTI_RES_ENCODING 1
</span><span class="cx"> %define CONFIG_TEMPORAL_DENOISING 1
</span><span class="cx"> %define CONFIG_VP9_TEMPORAL_DENOISING 1
</span><ins>+%define CONFIG_CONSISTENT_RECODE 0
</ins><span class="cx"> %define CONFIG_COEFFICIENT_RANGE_CHECKING 0
</span><span class="cx"> %define CONFIG_VP9_HIGHBITDEPTH 1
</span><span class="cx"> %define CONFIG_BETTER_HW_COMPATIBILITY 0
</span><span class="lines">@@ -78,7 +79,6 @@
</span><span class="cx"> %define CONFIG_EXPERIMENTAL 0
</span><span class="cx"> %define CONFIG_SIZE_LIMIT 1
</span><span class="cx"> %define CONFIG_ALWAYS_ADJUST_BPM 0
</span><del>-%define CONFIG_SPATIAL_SVC 0
</del><span class="cx"> %define CONFIG_FP_MB_STATS 0
</span><span class="cx"> %define CONFIG_EMULATE_HARDWARE 0
</span><span class="cx"> %define DECODE_WIDTH_LIMIT 16384
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vpx_configh"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.h (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.h   2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_config.h      2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -55,15 +55,15 @@
</span><span class="cx"> #define CONFIG_DC_RECON 0
</span><span class="cx"> #define CONFIG_RUNTIME_CPU_DETECT 1
</span><span class="cx"> #define CONFIG_POSTPROC 1
</span><del>-#define CONFIG_VP9_POSTPROC 1
</del><ins>+#define CONFIG_VP9_POSTPROC 0
</ins><span class="cx"> #define CONFIG_MULTITHREAD 1
</span><span class="cx"> #define CONFIG_INTERNAL_STATS 0
</span><span class="cx"> #define CONFIG_VP8_ENCODER 1
</span><span class="cx"> #define CONFIG_VP8_DECODER 1
</span><del>-#define CONFIG_VP9_ENCODER 1
-#define CONFIG_VP9_DECODER 1
</del><ins>+#define CONFIG_VP9_ENCODER 0
+#define CONFIG_VP9_DECODER 0
</ins><span class="cx"> #define CONFIG_VP8 1
</span><del>-#define CONFIG_VP9 1
</del><ins>+#define CONFIG_VP9 0
</ins><span class="cx"> #define CONFIG_ENCODERS 1
</span><span class="cx"> #define CONFIG_DECODERS 1
</span><span class="cx"> #define CONFIG_STATIC_MSVCRT 0
</span><span class="lines">@@ -83,7 +83,8 @@
</span><span class="cx"> #define CONFIG_ENCODE_PERF_TESTS 0
</span><span class="cx"> #define CONFIG_MULTI_RES_ENCODING 1
</span><span class="cx"> #define CONFIG_TEMPORAL_DENOISING 1
</span><del>-#define CONFIG_VP9_TEMPORAL_DENOISING 1
</del><ins>+#define CONFIG_VP9_TEMPORAL_DENOISING 0
+#define CONFIG_CONSISTENT_RECODE 0
</ins><span class="cx"> #define CONFIG_COEFFICIENT_RANGE_CHECKING 0
</span><span class="cx"> #define CONFIG_VP9_HIGHBITDEPTH 1
</span><span class="cx"> #define CONFIG_BETTER_HW_COMPATIBILITY 0
</span><span class="lines">@@ -90,7 +91,6 @@
</span><span class="cx"> #define CONFIG_EXPERIMENTAL 0
</span><span class="cx"> #define CONFIG_SIZE_LIMIT 1
</span><span class="cx"> #define CONFIG_ALWAYS_ADJUST_BPM 0
</span><del>-#define CONFIG_SPATIAL_SVC 0
</del><span class="cx"> #define CONFIG_FP_MB_STATS 0
</span><span class="cx"> #define CONFIG_EMULATE_HARDWARE 0
</span><span class="cx"> #define DECODE_WIDTH_LIMIT 16384
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourceconfigmacx64vpx_dsp_rtcdh"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_dsp_rtcd.h (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_dsp_rtcd.h 2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/config/mac/x64/vpx_dsp_rtcd.h    2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -994,9 +994,6 @@
</span><span class="cx"> void vpx_hadamard_32x32_avx2(const int16_t* src_diff,
</span><span class="cx">                              ptrdiff_t src_stride,
</span><span class="cx">                              tran_low_t* coeff);
</span><del>-RTCD_EXTERN void (*vpx_hadamard_32x32)(const int16_t* src_diff,
-                                       ptrdiff_t src_stride,
-                                       tran_low_t* coeff);
</del><span class="cx"> 
</span><span class="cx"> void vpx_hadamard_8x8_c(const int16_t* src_diff,
</span><span class="cx">                         ptrdiff_t src_stride,
</span><span class="lines">@@ -7593,33 +7590,21 @@
</span><span class="cx">   vpx_convolve8 = vpx_convolve8_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_convolve8 = vpx_convolve8_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_convolve8 = vpx_convolve8_avx2;
</del><span class="cx">   vpx_convolve8_avg = vpx_convolve8_avg_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_convolve8_avg = vpx_convolve8_avg_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_convolve8_avg = vpx_convolve8_avg_avx2;
</del><span class="cx">   vpx_convolve8_avg_horiz = vpx_convolve8_avg_horiz_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_convolve8_avg_horiz = vpx_convolve8_avg_horiz_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_convolve8_avg_horiz = vpx_convolve8_avg_horiz_avx2;
</del><span class="cx">   vpx_convolve8_avg_vert = vpx_convolve8_avg_vert_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_convolve8_avg_vert = vpx_convolve8_avg_vert_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_convolve8_avg_vert = vpx_convolve8_avg_vert_avx2;
</del><span class="cx">   vpx_convolve8_horiz = vpx_convolve8_horiz_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_convolve8_horiz = vpx_convolve8_horiz_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_convolve8_horiz = vpx_convolve8_horiz_avx2;
</del><span class="cx">   vpx_convolve8_vert = vpx_convolve8_vert_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_convolve8_vert = vpx_convolve8_vert_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_convolve8_vert = vpx_convolve8_vert_avx2;
</del><span class="cx">   vpx_d153_predictor_16x16 = vpx_d153_predictor_16x16_c;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_d153_predictor_16x16 = vpx_d153_predictor_16x16_ssse3;
</span><span class="lines">@@ -7660,41 +7645,18 @@
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_d63_predictor_8x8 = vpx_d63_predictor_8x8_ssse3;
</span><span class="cx">   vpx_get16x16var = vpx_get16x16var_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_get16x16var = vpx_get16x16var_avx2;
</del><span class="cx">   vpx_hadamard_16x16 = vpx_hadamard_16x16_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_hadamard_16x16 = vpx_hadamard_16x16_avx2;
-  vpx_hadamard_32x32 = vpx_hadamard_32x32_sse2;
-  if (flags & HAS_AVX2)
-    vpx_hadamard_32x32 = vpx_hadamard_32x32_avx2;
</del><span class="cx">   vpx_hadamard_8x8 = vpx_hadamard_8x8_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_hadamard_8x8 = vpx_hadamard_8x8_ssse3;
</span><span class="cx">   vpx_highbd_convolve8 = vpx_highbd_convolve8_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve8 = vpx_highbd_convolve8_avx2;
</del><span class="cx">   vpx_highbd_convolve8_avg = vpx_highbd_convolve8_avg_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve8_avg = vpx_highbd_convolve8_avg_avx2;
</del><span class="cx">   vpx_highbd_convolve8_avg_horiz = vpx_highbd_convolve8_avg_horiz_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve8_avg_horiz = vpx_highbd_convolve8_avg_horiz_avx2;
</del><span class="cx">   vpx_highbd_convolve8_avg_vert = vpx_highbd_convolve8_avg_vert_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve8_avg_vert = vpx_highbd_convolve8_avg_vert_avx2;
</del><span class="cx">   vpx_highbd_convolve8_horiz = vpx_highbd_convolve8_horiz_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve8_horiz = vpx_highbd_convolve8_horiz_avx2;
</del><span class="cx">   vpx_highbd_convolve8_vert = vpx_highbd_convolve8_vert_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve8_vert = vpx_highbd_convolve8_vert_avx2;
</del><span class="cx">   vpx_highbd_convolve_avg = vpx_highbd_convolve_avg_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve_avg = vpx_highbd_convolve_avg_avx2;
</del><span class="cx">   vpx_highbd_convolve_copy = vpx_highbd_convolve_copy_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_highbd_convolve_copy = vpx_highbd_convolve_copy_avx2;
</del><span class="cx">   vpx_highbd_d117_predictor_16x16 = vpx_highbd_d117_predictor_16x16_c;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_highbd_d117_predictor_16x16 = vpx_highbd_d117_predictor_16x16_ssse3;
</span><span class="lines">@@ -7753,32 +7715,14 @@
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_highbd_d63_predictor_8x8 = vpx_highbd_d63_predictor_8x8_ssse3;
</span><span class="cx">   vpx_highbd_idct16x16_10_add = vpx_highbd_idct16x16_10_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct16x16_10_add = vpx_highbd_idct16x16_10_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct16x16_256_add = vpx_highbd_idct16x16_256_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct16x16_256_add = vpx_highbd_idct16x16_256_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct16x16_38_add = vpx_highbd_idct16x16_38_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct16x16_38_add = vpx_highbd_idct16x16_38_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct32x32_1024_add = vpx_highbd_idct32x32_1024_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct32x32_1024_add = vpx_highbd_idct32x32_1024_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct32x32_135_add = vpx_highbd_idct32x32_135_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct32x32_135_add = vpx_highbd_idct32x32_135_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct32x32_34_add = vpx_highbd_idct32x32_34_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct32x32_34_add = vpx_highbd_idct32x32_34_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct4x4_16_add = vpx_highbd_idct4x4_16_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct4x4_16_add = vpx_highbd_idct4x4_16_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct8x8_12_add = vpx_highbd_idct8x8_12_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct8x8_12_add = vpx_highbd_idct8x8_12_add_sse4_1;
</del><span class="cx">   vpx_highbd_idct8x8_64_add = vpx_highbd_idct8x8_64_add_sse2;
</span><del>-  if (flags & HAS_SSE4_1)
-    vpx_highbd_idct8x8_64_add = vpx_highbd_idct8x8_64_add_sse4_1;
</del><span class="cx">   vpx_idct32x32_135_add = vpx_idct32x32_135_add_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_idct32x32_135_add = vpx_idct32x32_135_add_ssse3;
</span><span class="lines">@@ -7789,100 +7733,42 @@
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_idct8x8_12_add = vpx_idct8x8_12_add_ssse3;
</span><span class="cx">   vpx_lpf_horizontal_16 = vpx_lpf_horizontal_16_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_lpf_horizontal_16 = vpx_lpf_horizontal_16_avx2;
</del><span class="cx">   vpx_lpf_horizontal_16_dual = vpx_lpf_horizontal_16_dual_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_lpf_horizontal_16_dual = vpx_lpf_horizontal_16_dual_avx2;
</del><span class="cx">   vpx_mse16x16 = vpx_mse16x16_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_mse16x16 = vpx_mse16x16_avx2;
</del><span class="cx">   vpx_mse16x8 = vpx_mse16x8_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_mse16x8 = vpx_mse16x8_avx2;
</del><span class="cx">   vpx_quantize_b = vpx_quantize_b_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_quantize_b = vpx_quantize_b_ssse3;
</span><del>-  if (flags & HAS_AVX)
-    vpx_quantize_b = vpx_quantize_b_avx;
</del><span class="cx">   vpx_quantize_b_32x32 = vpx_quantize_b_32x32_c;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_quantize_b_32x32 = vpx_quantize_b_32x32_ssse3;
</span><del>-  if (flags & HAS_AVX)
-    vpx_quantize_b_32x32 = vpx_quantize_b_32x32_avx;
-  vpx_sad16x16x3 = vpx_sad16x16x3_c;
-  if (flags & HAS_SSE3)
-    vpx_sad16x16x3 = vpx_sad16x16x3_sse3;
</del><ins>+  vpx_sad16x16x3 = vpx_sad16x16x3_sse3;
</ins><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sad16x16x3 = vpx_sad16x16x3_ssse3;
</span><del>-  vpx_sad16x16x8 = vpx_sad16x16x8_c;
-  if (flags & HAS_SSE4_1)
-    vpx_sad16x16x8 = vpx_sad16x16x8_sse4_1;
-  vpx_sad16x8x3 = vpx_sad16x8x3_c;
-  if (flags & HAS_SSE3)
-    vpx_sad16x8x3 = vpx_sad16x8x3_sse3;
</del><ins>+  vpx_sad16x16x8 = vpx_sad16x16x8_sse4_1;
+  vpx_sad16x8x3 = vpx_sad16x8x3_sse3;
</ins><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sad16x8x3 = vpx_sad16x8x3_ssse3;
</span><del>-  vpx_sad16x8x8 = vpx_sad16x8x8_c;
-  if (flags & HAS_SSE4_1)
-    vpx_sad16x8x8 = vpx_sad16x8x8_sse4_1;
</del><ins>+  vpx_sad16x8x8 = vpx_sad16x8x8_sse4_1;
</ins><span class="cx">   vpx_sad32x16 = vpx_sad32x16_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad32x16 = vpx_sad32x16_avx2;
</del><span class="cx">   vpx_sad32x16_avg = vpx_sad32x16_avg_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad32x16_avg = vpx_sad32x16_avg_avx2;
</del><span class="cx">   vpx_sad32x32 = vpx_sad32x32_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad32x32 = vpx_sad32x32_avx2;
</del><span class="cx">   vpx_sad32x32_avg = vpx_sad32x32_avg_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad32x32_avg = vpx_sad32x32_avg_avx2;
</del><span class="cx">   vpx_sad32x32x4d = vpx_sad32x32x4d_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad32x32x4d = vpx_sad32x32x4d_avx2;
</del><span class="cx">   vpx_sad32x64 = vpx_sad32x64_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad32x64 = vpx_sad32x64_avx2;
</del><span class="cx">   vpx_sad32x64_avg = vpx_sad32x64_avg_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad32x64_avg = vpx_sad32x64_avg_avx2;
-  vpx_sad4x4x3 = vpx_sad4x4x3_c;
-  if (flags & HAS_SSE3)
-    vpx_sad4x4x3 = vpx_sad4x4x3_sse3;
-  vpx_sad4x4x8 = vpx_sad4x4x8_c;
-  if (flags & HAS_SSE4_1)
-    vpx_sad4x4x8 = vpx_sad4x4x8_sse4_1;
</del><ins>+  vpx_sad4x4x3 = vpx_sad4x4x3_sse3;
+  vpx_sad4x4x8 = vpx_sad4x4x8_sse4_1;
</ins><span class="cx">   vpx_sad64x32 = vpx_sad64x32_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad64x32 = vpx_sad64x32_avx2;
</del><span class="cx">   vpx_sad64x32_avg = vpx_sad64x32_avg_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad64x32_avg = vpx_sad64x32_avg_avx2;
</del><span class="cx">   vpx_sad64x64 = vpx_sad64x64_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad64x64 = vpx_sad64x64_avx2;
</del><span class="cx">   vpx_sad64x64_avg = vpx_sad64x64_avg_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad64x64_avg = vpx_sad64x64_avg_avx2;
</del><span class="cx">   vpx_sad64x64x4d = vpx_sad64x64x4d_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sad64x64x4d = vpx_sad64x64x4d_avx2;
-  vpx_sad8x16x3 = vpx_sad8x16x3_c;
-  if (flags & HAS_SSE3)
-    vpx_sad8x16x3 = vpx_sad8x16x3_sse3;
-  vpx_sad8x16x8 = vpx_sad8x16x8_c;
-  if (flags & HAS_SSE4_1)
-    vpx_sad8x16x8 = vpx_sad8x16x8_sse4_1;
-  vpx_sad8x8x3 = vpx_sad8x8x3_c;
-  if (flags & HAS_SSE3)
-    vpx_sad8x8x3 = vpx_sad8x8x3_sse3;
-  vpx_sad8x8x8 = vpx_sad8x8x8_c;
-  if (flags & HAS_SSE4_1)
-    vpx_sad8x8x8 = vpx_sad8x8x8_sse4_1;
</del><ins>+  vpx_sad8x16x3 = vpx_sad8x16x3_sse3;
+  vpx_sad8x16x8 = vpx_sad8x16x8_sse4_1;
+  vpx_sad8x8x3 = vpx_sad8x8x3_sse3;
+  vpx_sad8x8x8 = vpx_sad8x8x8_sse4_1;
</ins><span class="cx">   vpx_satd = vpx_satd_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_satd = vpx_satd_avx2;
</del><span class="cx">   vpx_scaled_2d = vpx_scaled_2d_c;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_scaled_2d = vpx_scaled_2d_ssse3;
</span><span class="lines">@@ -7901,8 +7787,6 @@
</span><span class="cx">   vpx_sub_pixel_avg_variance32x32 = vpx_sub_pixel_avg_variance32x32_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_avg_variance32x32 = vpx_sub_pixel_avg_variance32x32_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sub_pixel_avg_variance32x32 = vpx_sub_pixel_avg_variance32x32_avx2;
</del><span class="cx">   vpx_sub_pixel_avg_variance32x64 = vpx_sub_pixel_avg_variance32x64_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_avg_variance32x64 = vpx_sub_pixel_avg_variance32x64_ssse3;
</span><span class="lines">@@ -7918,8 +7802,6 @@
</span><span class="cx">   vpx_sub_pixel_avg_variance64x64 = vpx_sub_pixel_avg_variance64x64_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_avg_variance64x64 = vpx_sub_pixel_avg_variance64x64_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sub_pixel_avg_variance64x64 = vpx_sub_pixel_avg_variance64x64_avx2;
</del><span class="cx">   vpx_sub_pixel_avg_variance8x16 = vpx_sub_pixel_avg_variance8x16_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_avg_variance8x16 = vpx_sub_pixel_avg_variance8x16_ssse3;
</span><span class="lines">@@ -7944,8 +7826,6 @@
</span><span class="cx">   vpx_sub_pixel_variance32x32 = vpx_sub_pixel_variance32x32_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_variance32x32 = vpx_sub_pixel_variance32x32_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sub_pixel_variance32x32 = vpx_sub_pixel_variance32x32_avx2;
</del><span class="cx">   vpx_sub_pixel_variance32x64 = vpx_sub_pixel_variance32x64_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_variance32x64 = vpx_sub_pixel_variance32x64_ssse3;
</span><span class="lines">@@ -7961,8 +7841,6 @@
</span><span class="cx">   vpx_sub_pixel_variance64x64 = vpx_sub_pixel_variance64x64_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_variance64x64 = vpx_sub_pixel_variance64x64_ssse3;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_sub_pixel_variance64x64 = vpx_sub_pixel_variance64x64_avx2;
</del><span class="cx">   vpx_sub_pixel_variance8x16 = vpx_sub_pixel_variance8x16_sse2;
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_variance8x16 = vpx_sub_pixel_variance8x16_ssse3;
</span><span class="lines">@@ -7973,29 +7851,13 @@
</span><span class="cx">   if (flags & HAS_SSSE3)
</span><span class="cx">     vpx_sub_pixel_variance8x8 = vpx_sub_pixel_variance8x8_ssse3;
</span><span class="cx">   vpx_variance16x16 = vpx_variance16x16_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance16x16 = vpx_variance16x16_avx2;
</del><span class="cx">   vpx_variance16x32 = vpx_variance16x32_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance16x32 = vpx_variance16x32_avx2;
</del><span class="cx">   vpx_variance16x8 = vpx_variance16x8_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance16x8 = vpx_variance16x8_avx2;
</del><span class="cx">   vpx_variance32x16 = vpx_variance32x16_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance32x16 = vpx_variance32x16_avx2;
</del><span class="cx">   vpx_variance32x32 = vpx_variance32x32_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance32x32 = vpx_variance32x32_avx2;
</del><span class="cx">   vpx_variance32x64 = vpx_variance32x64_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance32x64 = vpx_variance32x64_avx2;
</del><span class="cx">   vpx_variance64x32 = vpx_variance64x32_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance64x32 = vpx_variance64x32_avx2;
</del><span class="cx">   vpx_variance64x64 = vpx_variance64x64_sse2;
</span><del>-  if (flags & HAS_AVX2)
-    vpx_variance64x64 = vpx_variance64x64_avx2;
</del><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partylibvpxsourcelibvpxgitignore"></a>
<div class="delfile"><h4>Deleted: trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/libvpx/.gitignore (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/libvpx/.gitignore     2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/libvpx/source/libvpx/.gitignore        2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,68 +0,0 @@
</span><del>-*.S
-*.a
-*.asm.s
-*.d
-*.gcda
-*.gcno
-*.o
-*~
-.cproject
-.project
-.settings
-/*-*.mk
-/*.asm
-/*.doxy
-/*.ivf
-/*.ivf.md5
-/.bins
-/.deps
-/.docs
-/.install-*
-/.libs
-/Makefile
-/config.log
-/config.mk
-/docs/
-/doxyfile
-/examples/*.dox
-/examples/decode_to_md5
-/examples/decode_with_drops
-/examples/decode_with_partial_drops
-/examples/example_xma
-/examples/postproc
-/examples/resize_util
-/examples/set_maps
-/examples/simple_decoder
-/examples/simple_encoder
-/examples/twopass_encoder
-/examples/vp8_multi_resolution_encoder
-/examples/vp8cx_set_ref
-/examples/vp9cx_set_ref
-/examples/vp9_lossless_encoder
-/examples/vp9_spatial_svc_encoder
-/examples/vpx_temporal_svc_encoder
-/ivfdec
-/ivfdec.dox
-/ivfenc
-/ivfenc.dox
-/libvpx.so*
-/libvpx.ver
-/samples.dox
-/test_intra_pred_speed
-/test_libvpx
-/tools.dox
-/tools/*.dox
-/tools/tiny_ssim
-/vp8_api1_migration.dox
-/vp[89x]_rtcd.h
-/vpx.pc
-/vpx_config.c
-/vpx_config.h
-/vpx_dsp_rtcd.h
-/vpx_scale_rtcd.h
-/vpx_version.h
-/vpxdec
-/vpxdec.dox
-/vpxenc
-/vpxenc.dox
-TAGS
</del></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partyyasm130GNU_LGPL20"></a>
<div class="delfile"><h4>Deleted: trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/GNU_LGPL-2.0 (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/GNU_LGPL-2.0     2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/GNU_LGPL-2.0        2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,481 +0,0 @@
</span><del>-                 GNU LIBRARY GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
-                     51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL.  It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
-                 GNU LIBRARY GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    c) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    d) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year> <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
</del></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partyyasm130libyasmbitvectc"></a>
<div class="addfile"><h4>Added: trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.c (0 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.c                                (rev 0)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.c   2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -0,0 +1,4048 @@
</span><ins>+// [Apple note:  bitvect.c and bitvect.h are triple licensed under the GPL, LGPL and Artistic license.
+// Apple chooses to use and redistribute the software under the terms of the Artistic license.]
+
+#include "util.h"
+
+#include "coretype.h"
+
+/*****************************************************************************/
+/*  MODULE NAME:  BitVector.c                           MODULE TYPE:  (adt)  */
+/*****************************************************************************/
+/*  MODULE IMPORTS:                                                          */
+/*****************************************************************************/
+#include <ctype.h>                                  /*  MODULE TYPE:  (sys)  */
+#include <limits.h>                                 /*  MODULE TYPE:  (sys)  */
+#include <string.h>                                 /*  MODULE TYPE:  (sys)  */
+/*****************************************************************************/
+/*  MODULE INTERFACE:                                                        */
+/*****************************************************************************/
+#include "bitvect.h"
+
+/* ToolBox.h */
+#define and         &&      /* logical (boolean) operators: lower case */
+#define or          ||
+#define not         !
+
+#define AND         &       /* binary (bitwise) operators: UPPER CASE */
+#define OR          |
+#define XOR         ^
+#define NOT         ~
+#define SHL         <<
+#define SHR         >>
+
+#ifdef ENABLE_MODULO
+#define mod         %       /* arithmetic operators */
+#endif
+
+#define blockdef(name,size)         unsigned char name[size]
+#define blocktypedef(name,size)     typedef unsigned char name[size]
+
+/*****************************************************************************/
+/*  MODULE RESOURCES:                                                        */
+/*****************************************************************************/
+
+#define bits_(BitVector) *(BitVector-3)
+#define size_(BitVector) *(BitVector-2)
+#define mask_(BitVector) *(BitVector-1)
+
+#define  ERRCODE_TYPE  "sizeof(word) > sizeof(size_t)"
+#define  ERRCODE_BITS  "bits(word) != sizeof(word)*8"
+#define  ERRCODE_WORD  "bits(word) < 16"
+#define  ERRCODE_LONG  "bits(word) > bits(long)"
+#define  ERRCODE_POWR  "bits(word) != 2^x"
+#define  ERRCODE_LOGA  "bits(word) != 2^ld(bits(word))"
+#define  ERRCODE_NULL  "unable to allocate memory"
+#define  ERRCODE_INDX  "index out of range"
+#define  ERRCODE_ORDR  "minimum > maximum index"
+#define  ERRCODE_SIZE  "bit vector size mismatch"
+#define  ERRCODE_PARS  "input string syntax error"
+#define  ERRCODE_OVFL  "numeric overflow error"
+#define  ERRCODE_SAME  "result vector(s) must be distinct"
+#define  ERRCODE_EXPO  "exponent must be positive"
+#define  ERRCODE_ZERO  "division by zero error"
+#define  ERRCODE_OOPS  "unexpected internal error - please contact author"
+
+const N_int BitVector_BYTENORM[256] =
+{
+    0x00, 0x01, 0x01, 0x02,  0x01, 0x02, 0x02, 0x03,
+    0x01, 0x02, 0x02, 0x03,  0x02, 0x03, 0x03, 0x04, /* 0x00 */
+    0x01, 0x02, 0x02, 0x03,  0x02, 0x03, 0x03, 0x04,
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05, /* 0x10 */
+    0x01, 0x02, 0x02, 0x03,  0x02, 0x03, 0x03, 0x04,
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05, /* 0x20 */
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05,
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06, /* 0x30 */
+    0x01, 0x02, 0x02, 0x03,  0x02, 0x03, 0x03, 0x04,
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05, /* 0x40 */
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05,
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06, /* 0x50 */
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05,
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06, /* 0x60 */
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06,
+    0x04, 0x05, 0x05, 0x06,  0x05, 0x06, 0x06, 0x07, /* 0x70 */
+    0x01, 0x02, 0x02, 0x03,  0x02, 0x03, 0x03, 0x04,
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05, /* 0x80 */
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05,
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06, /* 0x90 */
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05,
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06, /* 0xA0 */
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06,
+    0x04, 0x05, 0x05, 0x06,  0x05, 0x06, 0x06, 0x07, /* 0xB0 */
+    0x02, 0x03, 0x03, 0x04,  0x03, 0x04, 0x04, 0x05,
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06, /* 0xC0 */
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06,
+    0x04, 0x05, 0x05, 0x06,  0x05, 0x06, 0x06, 0x07, /* 0xD0 */
+    0x03, 0x04, 0x04, 0x05,  0x04, 0x05, 0x05, 0x06,
+    0x04, 0x05, 0x05, 0x06,  0x05, 0x06, 0x06, 0x07, /* 0xE0 */
+    0x04, 0x05, 0x05, 0x06,  0x05, 0x06, 0x06, 0x07,
+    0x05, 0x06, 0x06, 0x07,  0x06, 0x07, 0x07, 0x08  /* 0xF0 */
+};
+
+/*****************************************************************************/
+/*  MODULE IMPLEMENTATION:                                                   */
+/*****************************************************************************/
+
+    /**********************************************/
+    /* global implementation-intrinsic constants: */
+    /**********************************************/
+
+#define BIT_VECTOR_HIDDEN_WORDS 3
+
+    /*****************************************************************/
+    /* global machine-dependent constants (set by "BitVector_Boot"): */
+    /*****************************************************************/
+
+static N_word BITS;     /* = # of bits in machine word (must be power of 2)  */
+static N_word MODMASK;  /* = BITS - 1 (mask for calculating modulo BITS)     */
+static N_word LOGBITS;  /* = ld(BITS) (logarithmus dualis)                   */
+static N_word FACTOR;   /* = ld(BITS / 8) (ld of # of bytes)                 */
+
+static N_word LSB = 1;  /* = mask for least significant bit                  */
+static N_word MSB;      /* = mask for most significant bit                   */
+
+static N_word LONGBITS; /* = # of bits in unsigned long                      */
+
+static N_word LOG10;    /* = logarithm to base 10 of BITS - 1                */
+static N_word EXP10;    /* = largest possible power of 10 in signed int      */
+
+    /********************************************************************/
+    /* global bit mask table for fast access (set by "BitVector_Boot"): */
+    /********************************************************************/
+
+static wordptr BITMASKTAB;
+
+    /*****************************/
+    /* global macro definitions: */
+    /*****************************/
+
+#define BIT_VECTOR_ZERO_WORDS(target,count) \
+    while (count-- > 0) *target++ = 0;
+
+#define BIT_VECTOR_FILL_WORDS(target,fill,count) \
+    while (count-- > 0) *target++ = fill;
+
+#define BIT_VECTOR_FLIP_WORDS(target,flip,count) \
+    while (count-- > 0) *target++ ^= flip;
+
+#define BIT_VECTOR_COPY_WORDS(target,source,count) \
+    while (count-- > 0) *target++ = *source++;
+
+#define BIT_VECTOR_BACK_WORDS(target,source,count) \
+    { target += count; source += count; while (count-- > 0) *--target = *--source; }
+
+#define BIT_VECTOR_CLR_BIT(address,index) \
+    *(address+(index>>LOGBITS)) &= NOT BITMASKTAB[index AND MODMASK];
+
+#define BIT_VECTOR_SET_BIT(address,index) \
+    *(address+(index>>LOGBITS)) |= BITMASKTAB[index AND MODMASK];
+
+#define BIT_VECTOR_TST_BIT(address,index) \
+    ((*(address+(index>>LOGBITS)) AND BITMASKTAB[index AND MODMASK]) != 0)
+
+#define BIT_VECTOR_FLP_BIT(address,index,mask) \
+    (mask = BITMASKTAB[index AND MODMASK]), \
+    (((*(addr+(index>>LOGBITS)) ^= mask) AND mask) != 0)
+
+#define BIT_VECTOR_DIGITIZE(type,value,digit) \
+    value = (type) ((digit = value) / 10); \
+    digit -= value * 10; \
+    digit += (type) '0';
+
+    /*********************************************************/
+    /* private low-level functions (potentially dangerous!): */
+    /*********************************************************/
+
+static N_word power10(N_word x)
+{
+    N_word y = 1;
+
+    while (x-- > 0) y *= 10;
+    return(y);
+}
+
+static void BIT_VECTOR_zro_words(wordptr addr, N_word count)
+{
+    BIT_VECTOR_ZERO_WORDS(addr,count)
+}
+
+static void BIT_VECTOR_cpy_words(wordptr target, wordptr source, N_word count)
+{
+    BIT_VECTOR_COPY_WORDS(target,source,count)
+}
+
+static void BIT_VECTOR_mov_words(wordptr target, wordptr source, N_word count)
+{
+    if (target != source)
+    {
+        if (target < source) BIT_VECTOR_COPY_WORDS(target,source,count)
+        else                 BIT_VECTOR_BACK_WORDS(target,source,count)
+    }
+}
+
+static void BIT_VECTOR_ins_words(wordptr addr, N_word total, N_word count,
+                                 boolean clear)
+{
+    N_word length;
+
+    if ((total > 0) and (count > 0))
+    {
+        if (count > total) count = total;
+        length = total - count;
+        if (length > 0) BIT_VECTOR_mov_words(addr+count,addr,length);
+        if (clear)      BIT_VECTOR_zro_words(addr,count);
+    }
+}
+
+static void BIT_VECTOR_del_words(wordptr addr, N_word total, N_word count,
+                                 boolean clear)
+{
+    N_word length;
+
+    if ((total > 0) and (count > 0))
+    {
+        if (count > total) count = total;
+        length = total - count;
+        if (length > 0) BIT_VECTOR_mov_words(addr,addr+count,length);
+        if (clear)      BIT_VECTOR_zro_words(addr+length,count);
+    }
+}
+
+static void BIT_VECTOR_reverse(charptr string, N_word length)
+{
+    charptr last;
+    N_char  temp;
+
+    if (length > 1)
+    {
+        last = string + length - 1;
+        while (string < last)
+        {
+            temp = *string;
+            *string = *last;
+            *last = temp;
+            string++;
+            last--;
+        }
+    }
+}
+
+static N_word BIT_VECTOR_int2str(charptr string, N_word value)
+{
+    N_word  length;
+    N_word  digit;
+    charptr work;
+
+    work = string;
+    if (value > 0)
+    {
+        length = 0;
+        while (value > 0)
+        {
+            BIT_VECTOR_DIGITIZE(N_word,value,digit)
+            *work++ = (N_char) digit;
+            length++;
+        }
+        BIT_VECTOR_reverse(string,length);
+    }
+    else
+    {
+        length = 1;
+        *work++ = (N_char) '0';
+    }
+    return(length);
+}
+
+static N_word BIT_VECTOR_str2int(charptr string, N_word *value)
+{
+    N_word  length;
+    N_word  digit;
+
+    *value = 0;
+    length = 0;
+    digit = (N_word) *string++;
+    /* separate because isdigit() is likely a macro! */
+    while (isdigit((int)digit) != 0)
+    {
+        length++;
+        digit -= (N_word) '0';
+        if (*value) *value *= 10;
+        *value += digit;
+        digit = (N_word) *string++;
+    }
+    return(length);
+}
+
+    /********************************************/
+    /* routine to convert error code to string: */
+    /********************************************/
+
+const char * BitVector_Error(ErrCode error)
+{
+    switch (error)
+    {
+        case ErrCode_Ok:   return(     NULL     ); break;
+        case ErrCode_Type: return( ERRCODE_TYPE ); break;
+        case ErrCode_Bits: return( ERRCODE_BITS ); break;
+        case ErrCode_Word: return( ERRCODE_WORD ); break;
+        case ErrCode_Long: return( ERRCODE_LONG ); break;
+        case ErrCode_Powr: return( ERRCODE_POWR ); break;
+        case ErrCode_Loga: return( ERRCODE_LOGA ); break;
+        case ErrCode_Null: return( ERRCODE_NULL ); break;
+        case ErrCode_Indx: return( ERRCODE_INDX ); break;
+        case ErrCode_Ordr: return( ERRCODE_ORDR ); break;
+        case ErrCode_Size: return( ERRCODE_SIZE ); break;
+        case ErrCode_Pars: return( ERRCODE_PARS ); break;
+        case ErrCode_Ovfl: return( ERRCODE_OVFL ); break;
+        case ErrCode_Same: return( ERRCODE_SAME ); break;
+        case ErrCode_Expo: return( ERRCODE_EXPO ); break;
+        case ErrCode_Zero: return( ERRCODE_ZERO ); break;
+        default:           return( ERRCODE_OOPS ); break;
+    }
+}
+
+    /*****************************************/
+    /* automatic self-configuration routine: */
+    /*****************************************/
+
+    /*******************************************************/
+    /*                                                     */
+    /*   MUST be called once prior to any other function   */
+    /*   to initialize the machine dependent constants     */
+    /*   of this package! (But call only ONCE, or you      */
+    /*   will suffer memory leaks!)                        */
+    /*                                                     */
+    /*******************************************************/
+
+ErrCode BitVector_Boot(void)
+{
+    N_long longsample = 1L;
+    N_word sample = LSB;
+    N_word lsb;
+
+    if (sizeof(N_word) > sizeof(size_t)) return(ErrCode_Type);
+
+    BITS = 1;
+    while (sample <<= 1) BITS++;    /* determine # of bits in a machine word */
+
+    if (BITS != (sizeof(N_word) << 3)) return(ErrCode_Bits);
+
+    if (BITS < 16) return(ErrCode_Word);
+
+    LONGBITS = 1;
+    while (longsample <<= 1) LONGBITS++;  /* = # of bits in an unsigned long */
+
+    if (BITS > LONGBITS) return(ErrCode_Long);
+
+    LOGBITS = 0;
+    sample = BITS;
+    lsb = (sample AND LSB);
+    while ((sample >>= 1) and (not lsb))
+    {
+        LOGBITS++;
+        lsb = (sample AND LSB);
+    }
+
+    if (sample) return(ErrCode_Powr);      /* # of bits is not a power of 2! */
+
+    if (BITS != (LSB << LOGBITS)) return(ErrCode_Loga);
+
+    MODMASK = BITS - 1;
+    FACTOR = LOGBITS - 3;  /* ld(BITS / 8) = ld(BITS) - ld(8) = ld(BITS) - 3 */
+    MSB = (LSB << MODMASK);
+
+    BITMASKTAB = (wordptr) yasm_xmalloc((size_t) (BITS << FACTOR));
+
+    if (BITMASKTAB == NULL) return(ErrCode_Null);
+
+    for ( sample = 0; sample < BITS; sample++ )
+    {
+        BITMASKTAB[sample] = (LSB << sample);
+    }
+
+    LOG10 = (N_word) (MODMASK * 0.30103); /* = (BITS - 1) * ( ln 2 / ln 10 ) */
+    EXP10 = power10(LOG10);
+
+    return(ErrCode_Ok);
+}
+
+void BitVector_Shutdown(void)
+{
+    if (BITMASKTAB) yasm_xfree(BITMASKTAB);
+}
+
+N_word BitVector_Size(N_int bits)           /* bit vector size (# of words)  */
+{
+    N_word size;
+
+    size = bits >> LOGBITS;
+    if (bits AND MODMASK) size++;
+    return(size);
+}
+
+N_word BitVector_Mask(N_int bits)           /* bit vector mask (unused bits) */
+{
+    N_word mask;
+
+    mask = bits AND MODMASK;
+    if (mask) mask = (N_word) ~(~0L << mask); else mask = (N_word) ~0L;
+    return(mask);
+}
+
+const char * BitVector_Version(void)
+{
+    return("6.4");
+}
+
+N_int BitVector_Word_Bits(void)
+{
+    return(BITS);
+}
+
+N_int BitVector_Long_Bits(void)
+{
+    return(LONGBITS);
+}
+
+/********************************************************************/
+/*                                                                  */
+/*  WARNING: Do not "free()" constant character strings, i.e.,      */
+/*           don't call "BitVector_Dispose()" for strings returned  */
+/*           by "BitVector_Error()" or "BitVector_Version()"!       */
+/*                                                                  */
+/*  ONLY call this function for strings allocated with "malloc()",  */
+/*  i.e., the strings returned by the functions "BitVector_to_*()"  */
+/*  and "BitVector_Block_Read()"!                                   */
+/*                                                                  */
+/********************************************************************/
+
+void BitVector_Dispose(charptr string)                      /* free string   */
+{
+    if (string != NULL) yasm_xfree((voidptr) string);
+}
+
+void BitVector_Destroy(wordptr addr)                        /* free bitvec   */
+{
+    if (addr != NULL)
+    {
+        addr -= BIT_VECTOR_HIDDEN_WORDS;
+        yasm_xfree((voidptr) addr);
+    }
+}
+
+void BitVector_Destroy_List(listptr list, N_int count)      /* free list     */
+{
+    listptr slot;
+
+    if (list != NULL)
+    {
+        slot = list;
+        while (count-- > 0)
+        {
+            BitVector_Destroy(*slot++);
+        }
+        free((voidptr) list);
+    }
+}
+
+wordptr BitVector_Create(N_int bits, boolean clear)         /* malloc        */
+{
+    N_word  size;
+    N_word  mask;
+    N_word  bytes;
+    wordptr addr;
+    wordptr zero;
+
+    size = BitVector_Size(bits);
+    mask = BitVector_Mask(bits);
+    bytes = (size + BIT_VECTOR_HIDDEN_WORDS) << FACTOR;
+    addr = (wordptr) yasm_xmalloc((size_t) bytes);
+    if (addr != NULL)
+    {
+        *addr++ = bits;
+        *addr++ = size;
+        *addr++ = mask;
+        if (clear)
+        {
+            zero = addr;
+            BIT_VECTOR_ZERO_WORDS(zero,size)
+        }
+    }
+    return(addr);
+}
+
+listptr BitVector_Create_List(N_int bits, boolean clear, N_int count)
+{
+    listptr list = NULL;
+    listptr slot;
+    wordptr addr;
+    N_int   i;
+
+    if (count > 0)
+    {
+        list = (listptr) malloc(sizeof(wordptr) * count);
+        if (list != NULL)
+        {
+            slot = list;
+            for ( i = 0; i < count; i++ )
+            {
+                addr = BitVector_Create(bits,clear);
+                if (addr == NULL)
+                {
+                    BitVector_Destroy_List(list,i);
+                    return(NULL);
+                }
+                *slot++ = addr;
+            }
+        }
+    }
+    return(list);
+}
+
+wordptr BitVector_Resize(wordptr oldaddr, N_int bits)       /* realloc       */
+{
+    N_word  bytes;
+    N_word  oldsize;
+    N_word  oldmask;
+    N_word  newsize;
+    N_word  newmask;
+    wordptr newaddr;
+    wordptr source;
+    wordptr target;
+
+    oldsize = size_(oldaddr);
+    oldmask = mask_(oldaddr);
+    newsize = BitVector_Size(bits);
+    newmask = BitVector_Mask(bits);
+    if (oldsize > 0) *(oldaddr+oldsize-1) &= oldmask;
+    if (newsize <= oldsize)
+    {
+        newaddr = oldaddr;
+        bits_(newaddr) = bits;
+        size_(newaddr) = newsize;
+        mask_(newaddr) = newmask;
+        if (newsize > 0) *(newaddr+newsize-1) &= newmask;
+    }
+    else
+    {
+        bytes = (newsize + BIT_VECTOR_HIDDEN_WORDS) << FACTOR;
+        newaddr = (wordptr) yasm_xmalloc((size_t) bytes);
+        if (newaddr != NULL)
+        {
+            *newaddr++ = bits;
+            *newaddr++ = newsize;
+            *newaddr++ = newmask;
+            target = newaddr;
+            source = oldaddr;
+            newsize -= oldsize;
+            BIT_VECTOR_COPY_WORDS(target,source,oldsize)
+            BIT_VECTOR_ZERO_WORDS(target,newsize)
+        }
+        BitVector_Destroy(oldaddr);
+    }
+    return(newaddr);
+}
+
+wordptr BitVector_Shadow(wordptr addr)     /* makes new, same size but empty */
+{
+    return( BitVector_Create(bits_(addr),true) );
+}
+
+wordptr BitVector_Clone(wordptr addr)               /* makes exact duplicate */
+{
+    N_word  bits;
+    wordptr twin;
+
+    bits = bits_(addr);
+    twin = BitVector_Create(bits,false);
+    if ((twin != NULL) and (bits > 0))
+        BIT_VECTOR_cpy_words(twin,addr,size_(addr));
+    return(twin);
+}
+
+wordptr BitVector_Concat(wordptr X, wordptr Y)      /* returns concatenation */
+{
+    /* BEWARE that X = most significant part, Y = least significant part! */
+
+    N_word  bitsX;
+    N_word  bitsY;
+    N_word  bitsZ;
+    wordptr Z;
+
+    bitsX = bits_(X);
+    bitsY = bits_(Y);
+    bitsZ = bitsX + bitsY;
+    Z = BitVector_Create(bitsZ,false);
+    if ((Z != NULL) and (bitsZ > 0))
+    {
+        BIT_VECTOR_cpy_words(Z,Y,size_(Y));
+        BitVector_Interval_Copy(Z,X,bitsY,0,bitsX);
+        *(Z+size_(Z)-1) &= mask_(Z);
+    }
+    return(Z);
+}
+
+void BitVector_Copy(wordptr X, wordptr Y)                           /* X = Y */
+{
+    N_word  sizeX = size_(X);
+    N_word  sizeY = size_(Y);
+    N_word  maskX = mask_(X);
+    N_word  maskY = mask_(Y);
+    N_word  fill  = 0;
+    wordptr lastX;
+    wordptr lastY;
+
+    if ((X != Y) and (sizeX > 0))
+    {
+        lastX = X + sizeX - 1;
+        if (sizeY > 0)
+        {
+            lastY = Y + sizeY - 1;
+            if ( (*lastY AND (maskY AND NOT (maskY >> 1))) == 0 ) *lastY &= maskY;
+            else
+            {
+                fill = (N_word) ~0L;
+                *lastY |= NOT maskY;
+            }
+            while ((sizeX > 0) and (sizeY > 0))
+            {
+                *X++ = *Y++;
+                sizeX--;
+                sizeY--;
+            }
+            *lastY &= maskY;
+        }
+        while (sizeX-- > 0) *X++ = fill;
+        *lastX &= maskX;
+    }
+}
+
+void BitVector_Empty(wordptr addr)                        /* X = {}  clr all */
+{
+    N_word size = size_(addr);
+
+    BIT_VECTOR_ZERO_WORDS(addr,size)
+}
+
+void BitVector_Fill(wordptr addr)                         /* X = ~{} set all */
+{
+    N_word size = size_(addr);
+    N_word mask = mask_(addr);
+    N_word fill = (N_word) ~0L;
+
+    if (size > 0)
+    {
+        BIT_VECTOR_FILL_WORDS(addr,fill,size)
+        *(--addr) &= mask;
+    }
+}
+
+void BitVector_Flip(wordptr addr)                         /* X = ~X flip all */
+{
+    N_word size = size_(addr);
+    N_word mask = mask_(addr);
+    N_word flip = (N_word) ~0L;
+
+    if (size > 0)
+    {
+        BIT_VECTOR_FLIP_WORDS(addr,flip,size)
+        *(--addr) &= mask;
+    }
+}
+
+void BitVector_Primes(wordptr addr)
+{
+    N_word  bits = bits_(addr);
+    N_word  size = size_(addr);
+    wordptr work;
+    N_word  temp;
+    N_word  i,j;
+
+    if (size > 0)
+    {
+        temp = 0xAAAA;
+        i = BITS >> 4;
+        while (--i > 0)
+        {
+            temp <<= 16;
+            temp |= 0xAAAA;
+        }
+        i = size;
+        work = addr;
+        *work++ = temp XOR 0x0006;
+        while (--i > 0) *work++ = temp;
+        for ( i = 3; (j = i * i) < bits; i += 2 )
+        {
+            for ( ; j < bits; j += i ) BIT_VECTOR_CLR_BIT(addr,j)
+        }
+        *(addr+size-1) &= mask_(addr);
+    }
+}
+
+void BitVector_Reverse(wordptr X, wordptr Y)
+{
+    N_word bits = bits_(X);
+    N_word mask;
+    N_word bit;
+    N_word value;
+
+    if (bits > 0)
+    {
+        if (X == Y) BitVector_Interval_Reverse(X,0,bits-1);
+        else if (bits == bits_(Y))
+        {
+/*          mask = mask_(Y);  */
+/*          mask &= NOT (mask >> 1);  */
+            mask = BITMASKTAB[(bits-1) AND MODMASK];
+            Y += size_(Y) - 1;
+            value = 0;
+            bit = LSB;
+            while (bits-- > 0)
+            {
+                if ((*Y AND mask) != 0)
+                {
+                    value |= bit;
+                }
+                if (not (mask >>= 1))
+                {
+                    Y--;
+                    mask = MSB;
+                }
+                if (not (bit <<= 1))
+                {
+                    *X++ = value;
+                    value = 0;
+                    bit = LSB;
+                }
+            }
+            if (bit > LSB) *X = value;
+        }
+    }
+}
+
+void BitVector_Interval_Empty(wordptr addr, N_int lower, N_int upper)
+{                                                  /* X = X \ [lower..upper] */
+    N_word  bits = bits_(addr);
+    N_word  size = size_(addr);
+    wordptr loaddr;
+    wordptr hiaddr;
+    N_word  lobase;
+    N_word  hibase;
+    N_word  lomask;
+    N_word  himask;
+    N_word  diff;
+
+    if ((size > 0) and (lower < bits) and (upper < bits) and (lower <= upper))
+    {
+        lobase = lower >> LOGBITS;
+        hibase = upper >> LOGBITS;
+        diff = hibase - lobase;
+        loaddr = addr + lobase;
+        hiaddr = addr + hibase;
+
+        lomask = (N_word)   (~0L << (lower AND MODMASK));
+        himask = (N_word) ~((~0L << (upper AND MODMASK)) << 1);
+
+        if (diff == 0)
+        {
+            *loaddr &= NOT (lomask AND himask);
+        }
+        else
+        {
+            *loaddr++ &= NOT lomask;
+            while (--diff > 0)
+            {
+                *loaddr++ = 0;
+            }
+            *hiaddr &= NOT himask;
+        }
+    }
+}
+
+void BitVector_Interval_Fill(wordptr addr, N_int lower, N_int upper)
+{                                                  /* X = X + [lower..upper] */
+    N_word  bits = bits_(addr);
+    N_word  size = size_(addr);
+    N_word  fill = (N_word) ~0L;
+    wordptr loaddr;
+    wordptr hiaddr;
+    N_word  lobase;
+    N_word  hibase;
+    N_word  lomask;
+    N_word  himask;
+    N_word  diff;
+
+    if ((size > 0) and (lower < bits) and (upper < bits) and (lower <= upper))
+    {
+        lobase = lower >> LOGBITS;
+        hibase = upper >> LOGBITS;
+        diff = hibase - lobase;
+        loaddr = addr + lobase;
+        hiaddr = addr + hibase;
+
+        lomask = (N_word)   (~0L << (lower AND MODMASK));
+        himask = (N_word) ~((~0L << (upper AND MODMASK)) << 1);
+
+        if (diff == 0)
+        {
+            *loaddr |= (lomask AND himask);
+        }
+        else
+        {
+            *loaddr++ |= lomask;
+            while (--diff > 0)
+            {
+                *loaddr++ = fill;
+            }
+            *hiaddr |= himask;
+        }
+        *(addr+size-1) &= mask_(addr);
+    }
+}
+
+void BitVector_Interval_Flip(wordptr addr, N_int lower, N_int upper)
+{                                                  /* X = X ^ [lower..upper] */
+    N_word  bits = bits_(addr);
+    N_word  size = size_(addr);
+    N_word  flip = (N_word) ~0L;
+    wordptr loaddr;
+    wordptr hiaddr;
+    N_word  lobase;
+    N_word  hibase;
+    N_word  lomask;
+    N_word  himask;
+    N_word  diff;
+
+    if ((size > 0) and (lower < bits) and (upper < bits) and (lower <= upper))
+    {
+        lobase = lower >> LOGBITS;
+        hibase = upper >> LOGBITS;
+        diff = hibase - lobase;
+        loaddr = addr + lobase;
+        hiaddr = addr + hibase;
+
+        lomask = (N_word)   (~0L << (lower AND MODMASK));
+        himask = (N_word) ~((~0L << (upper AND MODMASK)) << 1);
+
+        if (diff == 0)
+        {
+            *loaddr ^= (lomask AND himask);
+        }
+        else
+        {
+            *loaddr++ ^= lomask;
+            while (--diff > 0)
+            {
+                *loaddr++ ^= flip;
+            }
+            *hiaddr ^= himask;
+        }
+        *(addr+size-1) &= mask_(addr);
+    }
+}
+
+void BitVector_Interval_Reverse(wordptr addr, N_int lower, N_int upper)
+{
+    N_word  bits = bits_(addr);
+    wordptr loaddr;
+    wordptr hiaddr;
+    N_word  lomask;
+    N_word  himask;
+
+    if ((bits > 0) and (lower < bits) and (upper < bits) and (lower < upper))
+    {
+        loaddr = addr + (lower >> LOGBITS);
+        hiaddr = addr + (upper >> LOGBITS);
+        lomask = BITMASKTAB[lower AND MODMASK];
+        himask = BITMASKTAB[upper AND MODMASK];
+        for ( bits = upper - lower + 1; bits > 1; bits -= 2 )
+        {
+            if (((*loaddr AND lomask) != 0) XOR ((*hiaddr AND himask) != 0))
+            {
+                *loaddr ^= lomask;  /* swap bits only if they differ! */
+                *hiaddr ^= himask;
+            }
+            if (not (lomask <<= 1))
+            {
+                lomask = LSB;
+                loaddr++;
+            }
+            if (not (himask >>= 1))
+            {
+                himask = MSB;
+                hiaddr--;
+            }
+        }
+    }
+}
+
+boolean BitVector_interval_scan_inc(wordptr addr, N_int start,
+                                    N_intptr min, N_intptr max)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    N_word  offset;
+    N_word  bitmask;
+    N_word  value;
+    boolean empty;
+
+    if ((size == 0) or (start >= bits_(addr))) return(FALSE);
+
+    *min = start;
+    *max = start;
+
+    offset = start >> LOGBITS;
+
+    *(addr+size-1) &= mask;
+
+    addr += offset;
+    size -= offset;
+
+    bitmask = BITMASKTAB[start AND MODMASK];
+    mask = NOT (bitmask OR (bitmask - 1));
+
+    value = *addr++;
+    if ((value AND bitmask) == 0)
+    {
+        value &= mask;
+        if (value == 0)
+        {
+            offset++;
+            empty = TRUE;
+            while (empty and (--size > 0))
+            {
+                if ((value = *addr++)) empty = false; else offset++;
+            }
+            if (empty) return(FALSE);
+        }
+        start = offset << LOGBITS;
+        bitmask = LSB;
+        mask = value;
+        while (not (mask AND LSB))
+        {
+            bitmask <<= 1;
+            mask >>= 1;
+            start++;
+        }
+        mask = NOT (bitmask OR (bitmask - 1));
+        *min = start;
+        *max = start;
+    }
+    value = NOT value;
+    value &= mask;
+    if (value == 0)
+    {
+        offset++;
+        empty = TRUE;
+        while (empty and (--size > 0))
+        {
+            if ((value = NOT *addr++)) empty = false; else offset++;
+        }
+        if (empty) value = LSB;
+    }
+    start = offset << LOGBITS;
+    while (not (value AND LSB))
+    {
+        value >>= 1;
+        start++;
+    }
+    *max = --start;
+    return(TRUE);
+}
+
+boolean BitVector_interval_scan_dec(wordptr addr, N_int start,
+                                    N_intptr min, N_intptr max)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    N_word offset;
+    N_word bitmask;
+    N_word value;
+    boolean empty;
+
+    if ((size == 0) or (start >= bits_(addr))) return(FALSE);
+
+    *min = start;
+    *max = start;
+
+    offset = start >> LOGBITS;
+
+    if (offset >= size) return(FALSE);
+
+    *(addr+size-1) &= mask;
+
+    addr += offset;
+    size = ++offset;
+
+    bitmask = BITMASKTAB[start AND MODMASK];
+    mask = (bitmask - 1);
+
+    value = *addr--;
+    if ((value AND bitmask) == 0)
+    {
+        value &= mask;
+        if (value == 0)
+        {
+            offset--;
+            empty = TRUE;
+            while (empty and (--size > 0))
+            {
+                if ((value = *addr--)) empty = false; else offset--;
+            }
+            if (empty) return(FALSE);
+        }
+        start = offset << LOGBITS;
+        bitmask = MSB;
+        mask = value;
+        while (not (mask AND MSB))
+        {
+            bitmask >>= 1;
+            mask <<= 1;
+            start--;
+        }
+        mask = (bitmask - 1);
+        *max = --start;
+        *min = start;
+    }
+    value = NOT value;
+    value &= mask;
+    if (value == 0)
+    {
+        offset--;
+        empty = TRUE;
+        while (empty and (--size > 0))
+        {
+            if ((value = NOT *addr--)) empty = false; else offset--;
+        }
+        if (empty) value = MSB;
+    }
+    start = offset << LOGBITS;
+    while (not (value AND MSB))
+    {
+        value <<= 1;
+        start--;
+    }
+    *min = start;
+    return(TRUE);
+}
+
+void BitVector_Interval_Copy(wordptr X, wordptr Y, N_int Xoffset,
+                             N_int Yoffset, N_int length)
+{
+    N_word  bitsX = bits_(X);
+    N_word  bitsY = bits_(Y);
+    N_word  source = 0;        /* silence compiler warning */
+    N_word  target = 0;        /* silence compiler warning */
+    N_word  s_lo_base;
+    N_word  s_hi_base;
+    N_word  s_lo_bit;
+    N_word  s_hi_bit;
+    N_word  s_base;
+    N_word  s_lower = 0;       /* silence compiler warning */
+    N_word  s_upper = 0;       /* silence compiler warning */
+    N_word  s_bits;
+    N_word  s_min;
+    N_word  s_max;
+    N_word  t_lo_base;
+    N_word  t_hi_base;
+    N_word  t_lo_bit;
+    N_word  t_hi_bit;
+    N_word  t_base;
+    N_word  t_lower = 0;       /* silence compiler warning */
+    N_word  t_upper = 0;       /* silence compiler warning */
+    N_word  t_bits;
+    N_word  t_min;
+    N_word  mask;
+    N_word  bits;
+    N_word  sel;
+    boolean ascending;
+    boolean notfirst;
+    wordptr Z = X;
+
+    if ((length > 0) and (Xoffset < bitsX) and (Yoffset < bitsY))
+    {
+        if ((Xoffset + length) > bitsX) length = bitsX - Xoffset;
+        if ((Yoffset + length) > bitsY) length = bitsY - Yoffset;
+
+        ascending = (Xoffset <= Yoffset);
+
+        s_lo_base = Yoffset >> LOGBITS;
+        s_lo_bit = Yoffset AND MODMASK;
+        Yoffset += --length;
+        s_hi_base = Yoffset >> LOGBITS;
+        s_hi_bit = Yoffset AND MODMASK;
+
+        t_lo_base = Xoffset >> LOGBITS;
+        t_lo_bit = Xoffset AND MODMASK;
+        Xoffset += length;
+        t_hi_base = Xoffset >> LOGBITS;
+        t_hi_bit = Xoffset AND MODMASK;
+
+        if (ascending)
+        {
+            s_base = s_lo_base;
+            t_base = t_lo_base;
+        }
+        else
+        {
+            s_base = s_hi_base;
+            t_base = t_hi_base;
+        }
+        s_bits = 0;
+        t_bits = 0;
+        Y += s_base;
+        X += t_base;
+        notfirst = FALSE;
+        while (TRUE)
+        {
+            if (t_bits == 0)
+            {
+                if (notfirst)
+                {
+                    *X = target;
+                    if (ascending)
+                    {
+                        if (t_base == t_hi_base) break;
+                        t_base++;
+                        X++;
+                    }
+                    else
+                    {
+                        if (t_base == t_lo_base) break;
+                        t_base--;
+                        X--;
+                    }
+                }
+                sel = ((t_base == t_hi_base) << 1) OR (t_base == t_lo_base);
+                switch (sel)
+                {
+                    case 0:
+                        t_lower = 0;
+                        t_upper = BITS - 1;
+                        t_bits = BITS;
+                        target = 0;
+                        break;
+                    case 1:
+                        t_lower = t_lo_bit;
+                        t_upper = BITS - 1;
+                        t_bits = BITS - t_lo_bit;
+                        mask = (N_word) (~0L << t_lower);
+                        target = *X AND NOT mask;
+                        break;
+                    case 2:
+                        t_lower = 0;
+                        t_upper = t_hi_bit;
+                        t_bits = t_hi_bit + 1;
+                        mask = (N_word) ((~0L << t_upper) << 1);
+                        target = *X AND mask;
+                        break;
+                    case 3:
+                        t_lower = t_lo_bit;
+                        t_upper = t_hi_bit;
+                        t_bits = t_hi_bit - t_lo_bit + 1;
+                        mask = (N_word) (~0L << t_lower);
+                        mask &= (N_word) ~((~0L << t_upper) << 1);
+                        target = *X AND NOT mask;
+                        break;
+                }
+            }
+            if (s_bits == 0)
+            {
+                if (notfirst)
+                {
+                    if (ascending)
+                    {
+                        if (s_base == s_hi_base) break;
+                        s_base++;
+                        Y++;
+                    }
+                    else
+                    {
+                        if (s_base == s_lo_base) break;
+                        s_base--;
+                        Y--;
+                    }
+                }
+                source = *Y;
+                sel = ((s_base == s_hi_base) << 1) OR (s_base == s_lo_base);
+                switch (sel)
+                {
+                    case 0:
+                        s_lower = 0;
+                        s_upper = BITS - 1;
+                        s_bits = BITS;
+                        break;
+                    case 1:
+                        s_lower = s_lo_bit;
+                        s_upper = BITS - 1;
+                        s_bits = BITS - s_lo_bit;
+                        break;
+                    case 2:
+                        s_lower = 0;
+                        s_upper = s_hi_bit;
+                        s_bits = s_hi_bit + 1;
+                        break;
+                    case 3:
+                        s_lower = s_lo_bit;
+                        s_upper = s_hi_bit;
+                        s_bits = s_hi_bit - s_lo_bit + 1;
+                        break;
+                }
+            }
+            notfirst = TRUE;
+            if (s_bits > t_bits)
+            {
+                bits = t_bits - 1;
+                if (ascending)
+                {
+                    s_min = s_lower;
+                    s_max = s_lower + bits;
+                }
+                else
+                {
+                    s_max = s_upper;
+                    s_min = s_upper - bits;
+                }
+                t_min = t_lower;
+            }
+            else
+            {
+                bits = s_bits - 1;
+                if (ascending) t_min = t_lower;
+                else           t_min = t_upper - bits;
+                s_min = s_lower;
+                s_max = s_upper;
+            }
+            bits++;
+            mask = (N_word) (~0L << s_min);
+            mask &= (N_word) ~((~0L << s_max) << 1);
+            if (s_min == t_min) target |= (source AND mask);
+            else
+            {
+                if (s_min < t_min) target |= (source AND mask) << (t_min-s_min);
+                else               target |= (source AND mask) >> (s_min-t_min);
+            }
+            if (ascending)
+            {
+                s_lower += bits;
+                t_lower += bits;
+            }
+            else
+            {
+                s_upper -= bits;
+                t_upper -= bits;
+            }
+            s_bits -= bits;
+            t_bits -= bits;
+        }
+        *(Z+size_(Z)-1) &= mask_(Z);
+    }
+}
+
+
+wordptr BitVector_Interval_Substitute(wordptr X, wordptr Y,
+                                      N_int Xoffset, N_int Xlength,
+                                      N_int Yoffset, N_int Ylength)
+{
+    N_word Xbits = bits_(X);
+    N_word Ybits = bits_(Y);
+    N_word limit;
+    N_word diff;
+
+    if ((Xoffset <= Xbits) and (Yoffset <= Ybits))
+    {
+        limit = Xoffset + Xlength;
+        if (limit > Xbits)
+        {
+            limit = Xbits;
+            Xlength = Xbits - Xoffset;
+        }
+        if ((Yoffset + Ylength) > Ybits)
+        {
+            Ylength = Ybits - Yoffset;
+        }
+        if (Xlength == Ylength)
+        {
+            if ((Ylength > 0) and ((X != Y) or (Xoffset != Yoffset)))
+            {
+                BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength);
+            }
+        }
+        else /* Xlength != Ylength */
+        {
+            if (Xlength > Ylength)
+            {
+                diff = Xlength - Ylength;
+                if (Ylength > 0) BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength);
+                if (limit < Xbits) BitVector_Delete(X,Xoffset+Ylength,diff,FALSE);
+                if ((X = BitVector_Resize(X,Xbits-diff)) == NULL) return(NULL);
+            }
+            else /* Ylength > Xlength  ==>  Ylength > 0 */
+            {
+                diff = Ylength - Xlength;
+                if (X != Y)
+                {
+                    if ((X = BitVector_Resize(X,Xbits+diff)) == NULL) return(NULL);
+                    if (limit < Xbits) BitVector_Insert(X,limit,diff,FALSE);
+                    BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength);
+                }
+                else /* in-place */
+                {
+                    if ((Y = X = BitVector_Resize(X,Xbits+diff)) == NULL) return(NULL);
+                    if (limit >= Xbits)
+                    {
+                        BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength);
+                    }
+                    else /* limit < Xbits */
+                    {
+                        BitVector_Insert(X,limit,diff,FALSE);
+                        if ((Yoffset+Ylength) <= limit)
+                        {
+                            BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength);
+                        }
+                        else /* overlaps or lies above critical area */
+                        {
+                            if (limit <= Yoffset)
+                            {
+                                Yoffset += diff;
+                                BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength);
+                            }
+                            else /* Yoffset < limit */
+                            {
+                                Xlength = limit - Yoffset;
+                                BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Xlength);
+                                Yoffset = Xoffset + Ylength; /* = limit + diff */
+                                Xoffset += Xlength;
+                                Ylength -= Xlength;
+                                BitVector_Interval_Copy(X,Y,Xoffset,Yoffset,Ylength);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return(X);
+}
+
+boolean BitVector_is_empty(wordptr addr)                    /* X == {} ?     */
+{
+    N_word  size = size_(addr);
+    boolean r = TRUE;
+
+    if (size > 0)
+    {
+        *(addr+size-1) &= mask_(addr);
+        while (r and (size-- > 0)) r = ( *addr++ == 0 );
+    }
+    return(r);
+}
+
+boolean BitVector_is_full(wordptr addr)                     /* X == ~{} ?    */
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    boolean r = FALSE;
+    wordptr last;
+
+    if (size > 0)
+    {
+        r = TRUE;
+        last = addr + size - 1;
+        *last |= NOT mask;
+        while (r and (size-- > 0)) r = ( NOT *addr++ == 0 );
+        *last &= mask;
+    }
+    return(r);
+}
+
+boolean BitVector_equal(wordptr X, wordptr Y)               /* X == Y ?      */
+{
+    N_word  size = size_(X);
+    N_word  mask = mask_(X);
+    boolean r = FALSE;
+
+    if (bits_(X) == bits_(Y))
+    {
+        r = TRUE;
+        if (size > 0)
+        {
+            *(X+size-1) &= mask;
+            *(Y+size-1) &= mask;
+            while (r and (size-- > 0)) r = (*X++ == *Y++);
+        }
+    }
+    return(r);
+}
+
+Z_int BitVector_Lexicompare(wordptr X, wordptr Y)           /* X <,=,> Y ?   */
+{                                                           /*  unsigned     */
+    N_word  bitsX = bits_(X);
+    N_word  bitsY = bits_(Y);
+    N_word  size  = size_(X);
+    boolean r = TRUE;
+
+    if (bitsX == bitsY)
+    {
+        if (size > 0)
+        {
+            X += size;
+            Y += size;
+            while (r and (size-- > 0)) r = (*(--X) == *(--Y));
+        }
+        if (r) return((Z_int) 0);
+        else
+        {
+            if (*X < *Y) return((Z_int) -1); else return((Z_int) 1);
+        }
+    }
+    else
+    {
+        if (bitsX < bitsY) return((Z_int) -1); else return((Z_int) 1);
+    }
+}
+
+Z_int BitVector_Compare(wordptr X, wordptr Y)               /* X <,=,> Y ?   */
+{                                                           /*   signed      */
+    N_word  bitsX = bits_(X);
+    N_word  bitsY = bits_(Y);
+    N_word  size  = size_(X);
+    N_word  mask  = mask_(X);
+    N_word  sign;
+    boolean r = TRUE;
+
+    if (bitsX == bitsY)
+    {
+        if (size > 0)
+        {
+            X += size;
+            Y += size;
+            mask &= NOT (mask >> 1);
+            if ((sign = (*(X-1) AND mask)) != (*(Y-1) AND mask))
+            {
+                if (sign) return((Z_int) -1); else return((Z_int) 1);
+            }
+            while (r and (size-- > 0)) r = (*(--X) == *(--Y));
+        }
+        if (r) return((Z_int) 0);
+        else
+        {
+            if (*X < *Y) return((Z_int) -1); else return((Z_int) 1);
+        }
+    }
+    else
+    {
+        if (bitsX < bitsY) return((Z_int) -1); else return((Z_int) 1);
+    }
+}
+
+charptr BitVector_to_Hex(wordptr addr)
+{
+    N_word  bits = bits_(addr);
+    N_word  size = size_(addr);
+    N_word  value;
+    N_word  count;
+    N_word  digit;
+    N_word  length;
+    charptr string;
+
+    length = bits >> 2;
+    if (bits AND 0x0003) length++;
+    string = (charptr) yasm_xmalloc((size_t) (length+1));
+    if (string == NULL) return(NULL);
+    string += length;
+    *string = (N_char) '\0';
+    if (size > 0)
+    {
+        *(addr+size-1) &= mask_(addr);
+        while ((size-- > 0) and (length > 0))
+        {
+            value = *addr++;
+            count = BITS >> 2;
+            while ((count-- > 0) and (length > 0))
+            {
+                digit = value AND 0x000F;
+                if (digit > 9) digit += (N_word) 'A' - 10;
+                else           digit += (N_word) '0';
+                *(--string) = (N_char) digit; length--;
+                if ((count > 0) and (length > 0)) value >>= 4;
+            }
+        }
+    }
+    return(string);
+}
+
+ErrCode BitVector_from_Hex(wordptr addr, charptr string)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    boolean ok = TRUE;
+    size_t  length;
+    N_word  value;
+    N_word  count;
+    int     digit;
+
+    if (size > 0)
+    {
+        length = strlen((char *) string);
+        string += length;
+        while (size-- > 0)
+        {
+            value = 0;
+            for ( count = 0; (ok and (length > 0) and (count < BITS)); count += 4 )
+            {
+                digit = (int) *(--string); length--;
+                /* separate because toupper() is likely a macro! */
+                digit = toupper(digit);
+                if (digit == '_')
+                    count -= 4;
+                else if ((ok = (isxdigit(digit) != 0)))
+                {
+                    if (digit >= (int) 'A') digit -= (int) 'A' - 10;
+                    else                    digit -= (int) '0';
+                    value |= (((N_word) digit) << count);
+                }
+            }
+            *addr++ = value;
+        }
+        *(--addr) &= mask;
+    }
+    if (ok) return(ErrCode_Ok);
+    else    return(ErrCode_Pars);
+}
+
+ErrCode BitVector_from_Oct(wordptr addr, charptr string)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    boolean ok = TRUE;
+    size_t  length;
+    N_word  value;
+    N_word  value_fill = 0;
+    N_word  count;
+    Z_word  count_fill = 0;
+    int     digit = 0;
+
+    if (size > 0)
+    {
+        length = strlen((char *) string);
+        string += length;
+        while (size-- > 0)
+        {
+            value = value_fill;
+            for ( count = count_fill; (ok and (length > 0) and (count < BITS)); count += 3 )
+            {
+                digit = (int) *(--string); length--;
+                if (digit == '_')
+                    count -= 3;
+                else if ((ok = (isdigit(digit) && digit != '8' && digit != '9')) != 0)
+                {
+                    digit -= (int) '0';
+                    value |= (((N_word) digit) << count);
+                }
+            }
+            count_fill = (Z_word)count-(Z_word)BITS;
+            if (count_fill > 0)
+                value_fill = (((N_word) digit) >> (3-count_fill));
+            else
+                value_fill = 0;
+            *addr++ = value;
+        }
+        *(--addr) &= mask;
+    }
+    if (ok) return(ErrCode_Ok);
+    else    return(ErrCode_Pars);
+}
+
+charptr BitVector_to_Bin(wordptr addr)
+{
+    N_word  size = size_(addr);
+    N_word  value;
+    N_word  count;
+    N_word  digit;
+    N_word  length;
+    charptr string;
+
+    length = bits_(addr);
+    string = (charptr) yasm_xmalloc((size_t) (length+1));
+    if (string == NULL) return(NULL);
+    string += length;
+    *string = (N_char) '\0';
+    if (size > 0)
+    {
+        *(addr+size-1) &= mask_(addr);
+        while (size-- > 0)
+        {
+            value = *addr++;
+            count = BITS;
+            if (count > length) count = length;
+            while (count-- > 0)
+            {
+                digit = value AND 0x0001;
+                digit += (N_word) '0';
+                *(--string) = (N_char) digit; length--;
+                if (count > 0) value >>= 1;
+            }
+        }
+    }
+    return(string);
+}
+
+ErrCode BitVector_from_Bin(wordptr addr, charptr string)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    boolean ok = TRUE;
+    size_t  length;
+    N_word  value;
+    N_word  count;
+    int     digit;
+
+    if (size > 0)
+    {
+        length = strlen((char *) string);
+        string += length;
+        while (size-- > 0)
+        {
+            value = 0;
+            for ( count = 0; (ok and (length > 0) and (count < BITS)); count++ )
+            {
+                digit = (int) *(--string); length--;
+                switch (digit)
+                {
+                    case (int) '0':
+                        break;
+                    case (int) '1':
+                        value |= BITMASKTAB[count];
+                        break;
+                    case (int) '_':
+                        count--;
+                        break;
+                    default:
+                        ok = FALSE;
+                        break;
+                }
+            }
+            *addr++ = value;
+        }
+        *(--addr) &= mask;
+    }
+    if (ok) return(ErrCode_Ok);
+    else    return(ErrCode_Pars);
+}
+
+charptr BitVector_to_Dec(wordptr addr)
+{
+    N_word  bits = bits_(addr);
+    N_word  length;
+    N_word  digits;
+    N_word  count;
+    N_word  q;
+    N_word  r;
+    boolean loop;
+    charptr result;
+    charptr string;
+    wordptr quot;
+    wordptr rest;
+    wordptr temp;
+    wordptr base;
+    Z_int   sign;
+
+    length = (N_word) (bits / 3.3);        /* digits = bits * ln(2) / ln(10) */
+    length += 2; /* compensate for truncating & provide space for minus sign */
+    result = (charptr) yasm_xmalloc((size_t) (length+1));   /* remember the '\0'! */
+    if (result == NULL) return(NULL);
+    string = result;
+    sign = BitVector_Sign(addr);
+    if ((bits < 4) or (sign == 0))
+    {
+        if (bits > 0) digits = *addr; else digits = (N_word) 0;
+        if (sign < 0) digits = ((N_word)(-((Z_word)digits))) AND mask_(addr);
+        *string++ = (N_char) digits + (N_char) '0';
+        digits = 1;
+    }
+    else
+    {
+        quot = BitVector_Create(bits,FALSE);
+        if (quot == NULL)
+        {
+            BitVector_Dispose(result);
+            return(NULL);
+        }
+        rest = BitVector_Create(bits,FALSE);
+        if (rest == NULL)
+        {
+            BitVector_Dispose(result);
+            BitVector_Destroy(quot);
+            return(NULL);
+        }
+        temp = BitVector_Create(bits,FALSE);
+        if (temp == NULL)
+        {
+            BitVector_Dispose(result);
+            BitVector_Destroy(quot);
+            BitVector_Destroy(rest);
+            return(NULL);
+        }
+        base = BitVector_Create(bits,TRUE);
+        if (base == NULL)
+        {
+            BitVector_Dispose(result);
+            BitVector_Destroy(quot);
+            BitVector_Destroy(rest);
+            BitVector_Destroy(temp);
+            return(NULL);
+        }
+        if (sign < 0) BitVector_Negate(quot,addr);
+        else           BitVector_Copy(quot,addr);
+        digits = 0;
+        *base = EXP10;
+        loop = (bits >= BITS);
+        do
+        {
+            if (loop)
+            {
+                BitVector_Copy(temp,quot);
+                if (BitVector_Div_Pos(quot,temp,base,rest))
+                {
+                    BitVector_Dispose(result); /* emergency exit */
+                    BitVector_Destroy(quot);
+                    BitVector_Destroy(rest);   /* should never occur */
+                    BitVector_Destroy(temp);   /* under normal operation */
+                    BitVector_Destroy(base);
+                    return(NULL);
+                }
+                loop = not BitVector_is_empty(quot);
+                q = *rest;
+            }
+            else q = *quot;
+            count = LOG10;
+            while (((loop and (count-- > 0)) or ((not loop) and (q != 0))) and
+                (digits < length))
+            {
+                if (q != 0)
+                {
+                    BIT_VECTOR_DIGITIZE(N_word,q,r)
+                }
+                else r = (N_word) '0';
+                *string++ = (N_char) r;
+                digits++;
+            }
+        }
+        while (loop and (digits < length));
+        BitVector_Destroy(quot);
+        BitVector_Destroy(rest);
+        BitVector_Destroy(temp);
+        BitVector_Destroy(base);
+    }
+    if ((sign < 0) and (digits < length))
+    {
+        *string++ = (N_char) '-';
+        digits++;
+    }
+    *string = (N_char) '\0';
+    BIT_VECTOR_reverse(result,digits);
+    return(result);
+}
+
+struct BitVector_from_Dec_static_data {
+    wordptr term;
+    wordptr base;
+    wordptr prod;
+    wordptr rank;
+    wordptr temp;
+};
+
+BitVector_from_Dec_static_data *BitVector_from_Dec_static_Boot(N_word bits)
+{
+    BitVector_from_Dec_static_data *data;
+
+    data = yasm_xmalloc(sizeof(BitVector_from_Dec_static_data));
+
+    if (bits > 0)
+    {
+        data->term = BitVector_Create(BITS,FALSE);
+        data->base = BitVector_Create(BITS,FALSE);
+        data->prod = BitVector_Create(bits,FALSE);
+        data->rank = BitVector_Create(bits,FALSE);
+        data->temp = BitVector_Create(bits,FALSE);
+    } else {
+        data->term = NULL;
+        data->base = NULL;
+        data->prod = NULL;
+        data->rank = NULL;
+        data->temp = NULL;
+    }
+    return data;
+}
+
+void BitVector_from_Dec_static_Shutdown(BitVector_from_Dec_static_data *data)
+{
+    if (data) {
+        BitVector_Destroy(data->term);
+        BitVector_Destroy(data->base);
+        BitVector_Destroy(data->prod);
+        BitVector_Destroy(data->rank);
+        BitVector_Destroy(data->temp);
+    }
+    yasm_xfree(data);
+}
+
+ErrCode BitVector_from_Dec_static(BitVector_from_Dec_static_data *data,
+                                  wordptr addr, charptr string)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bits = bits_(addr);
+    N_word  mask = mask_(addr);
+    boolean init = (bits > BITS);
+    boolean minus;
+    boolean shift;
+    boolean carry;
+    wordptr term;
+    wordptr base;
+    wordptr prod;
+    wordptr rank;
+    wordptr temp;
+    N_word  accu;
+    N_word  powr;
+    N_word  count;
+    size_t  length;
+    int     digit;
+
+    if (bits > 0)
+    {
+        term = data->term;
+        base = data->base;
+        prod = data->prod;
+        rank = data->rank;
+        temp = data->temp;
+
+        length = strlen((char *) string);
+        if (length == 0) return(ErrCode_Pars);
+        digit = (int) *string;
+        if ((minus = (digit == (int) '-')) or
+                     (digit == (int) '+'))
+        {
+            string++;
+            if (--length == 0) return(ErrCode_Pars);
+        }
+        string += length;
+        if (init)
+        {
+            BitVector_Empty(prod);
+            BitVector_Empty(rank);
+        }
+        BitVector_Empty(addr);
+        *base = EXP10;
+        shift = FALSE;
+        while ((not error) and (length > 0))
+        {
+            accu = 0;
+            powr = 1;
+            count = LOG10;
+            while ((not error) and (length > 0) and (count-- > 0))
+            {
+                digit = (int) *(--string); length--;
+                /* separate because isdigit() is likely a macro! */
+                if (isdigit(digit) != 0)
+                {
+                    accu += ((N_word) digit - (N_word) '0') * powr;
+                    powr *= 10;
+                }
+                else error = ErrCode_Pars;
+            }
+            if (not error)
+            {
+                if (shift)
+                {
+                    *term = accu;
+                    BitVector_Copy(temp,rank);
+                    error = BitVector_Mul_Pos(prod,temp,term,FALSE);
+                }
+                else
+                {
+                    *prod = accu;
+                    if ((not init) and ((accu AND NOT mask) != 0)) error = ErrCode_Ovfl;
+                }
+                if (not error)
+                {
+                    carry = FALSE;
+                    BitVector_compute(addr,addr,prod,FALSE,&carry);
+                    /* ignores sign change (= overflow) but not */
+                    /* numbers too large (= carry) for resulting bit vector */
+                    if (carry) error = ErrCode_Ovfl;
+                    else
+                    {
+                        if (length > 0)
+                        {
+                            if (shift)
+                            {
+                                BitVector_Copy(temp,rank);
+                                error = BitVector_Mul_Pos(rank,temp,base,FALSE);
+                            }
+                            else
+                            {
+                                *rank = *base;
+                                shift = TRUE;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (not error and minus)
+        {
+            BitVector_Negate(addr,addr);
+            if ((*(addr + size_(addr) - 1) AND mask AND NOT (mask >> 1)) == 0)
+                error = ErrCode_Ovfl;
+        }
+    }
+    return(error);
+}
+
+ErrCode BitVector_from_Dec(wordptr addr, charptr string)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bits = bits_(addr);
+    N_word  mask = mask_(addr);
+    boolean init = (bits > BITS);
+    boolean minus;
+    boolean shift;
+    boolean carry;
+    wordptr term;
+    wordptr base;
+    wordptr prod;
+    wordptr rank;
+    wordptr temp;
+    N_word  accu;
+    N_word  powr;
+    N_word  count;
+    size_t  length;
+    int     digit;
+
+    if (bits > 0)
+    {
+        length = strlen((char *) string);
+        if (length == 0) return(ErrCode_Pars);
+        digit = (int) *string;
+        if ((minus = (digit == (int) '-')) or
+                     (digit == (int) '+'))
+        {
+            string++;
+            if (--length == 0) return(ErrCode_Pars);
+        }
+        string += length;
+        term = BitVector_Create(BITS,FALSE);
+        if (term == NULL)
+        {
+            return(ErrCode_Null);
+        }
+        base = BitVector_Create(BITS,FALSE);
+        if (base == NULL)
+        {
+            BitVector_Destroy(term);
+            return(ErrCode_Null);
+        }
+        prod = BitVector_Create(bits,init);
+        if (prod == NULL)
+        {
+            BitVector_Destroy(term);
+            BitVector_Destroy(base);
+            return(ErrCode_Null);
+        }
+        rank = BitVector_Create(bits,init);
+        if (rank == NULL)
+        {
+            BitVector_Destroy(term);
+            BitVector_Destroy(base);
+            BitVector_Destroy(prod);
+            return(ErrCode_Null);
+        }
+        temp = BitVector_Create(bits,FALSE);
+        if (temp == NULL)
+        {
+            BitVector_Destroy(term);
+            BitVector_Destroy(base);
+            BitVector_Destroy(prod);
+            BitVector_Destroy(rank);
+            return(ErrCode_Null);
+        }
+        BitVector_Empty(addr);
+        *base = EXP10;
+        shift = FALSE;
+        while ((not error) and (length > 0))
+        {
+            accu = 0;
+            powr = 1;
+            count = LOG10;
+            while ((not error) and (length > 0) and (count-- > 0))
+            {
+                digit = (int) *(--string); length--;
+                /* separate because isdigit() is likely a macro! */
+                if (isdigit(digit) != 0)
+                {
+                    accu += ((N_word) digit - (N_word) '0') * powr;
+                    powr *= 10;
+                }
+                else error = ErrCode_Pars;
+            }
+            if (not error)
+            {
+                if (shift)
+                {
+                    *term = accu;
+                    BitVector_Copy(temp,rank);
+                    error = BitVector_Mul_Pos(prod,temp,term,FALSE);
+                }
+                else
+                {
+                    *prod = accu;
+                    if ((not init) and ((accu AND NOT mask) != 0)) error = ErrCode_Ovfl;
+                }
+                if (not error)
+                {
+                    carry = FALSE;
+                    BitVector_compute(addr,addr,prod,FALSE,&carry);
+                    /* ignores sign change (= overflow) but not */
+                    /* numbers too large (= carry) for resulting bit vector */
+                    if (carry) error = ErrCode_Ovfl;
+                    else
+                    {
+                        if (length > 0)
+                        {
+                            if (shift)
+                            {
+                                BitVector_Copy(temp,rank);
+                                error = BitVector_Mul_Pos(rank,temp,base,FALSE);
+                            }
+                            else
+                            {
+                                *rank = *base;
+                                shift = TRUE;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        BitVector_Destroy(term);
+        BitVector_Destroy(base);
+        BitVector_Destroy(prod);
+        BitVector_Destroy(rank);
+        BitVector_Destroy(temp);
+        if (not error and minus)
+        {
+            BitVector_Negate(addr,addr);
+            if ((*(addr + size_(addr) - 1) AND mask AND NOT (mask >> 1)) == 0)
+                error = ErrCode_Ovfl;
+        }
+    }
+    return(error);
+}
+
+charptr BitVector_to_Enum(wordptr addr)
+{
+    N_word  bits = bits_(addr);
+    N_word  sample;
+    N_word  length;
+    N_word  digits;
+    N_word  factor;
+    N_word  power;
+    N_word  start;
+    N_word  min;
+    N_word  max;
+    charptr string;
+    charptr target;
+    boolean comma;
+
+    if (bits > 0)
+    {
+        sample = bits - 1;  /* greatest possible index */
+        length = 2;         /* account for index 0 and terminating '\0' */
+        digits = 1;         /* account for intervening dashes and commas */
+        factor = 1;
+        power = 10;
+        while (sample >= (power-1))
+        {
+            length += ++digits * factor * 6;  /* 9,90,900,9000,... (9*2/3 = 6) */
+            factor = power;
+            power *= 10;
+        }
+        if (sample > --factor)
+        {
+            sample -= factor;
+            factor = (N_word) ( sample / 3 );
+            factor = (factor << 1) + (sample - (factor * 3));
+            length += ++digits * factor;
+        }
+    }
+    else length = 1;
+    string = (charptr) yasm_xmalloc((size_t) length);
+    if (string == NULL) return(NULL);
+    start = 0;
+    comma = FALSE;
+    target = string;
+    while ((start < bits) and BitVector_interval_scan_inc(addr,start,&min,&max))
+    {
+        start = max + 2;
+        if (comma) *target++ = (N_char) ',';
+        if (min == max)
+        {
+            target += BIT_VECTOR_int2str(target,min);
+        }
+        else
+        {
+            if (min+1 == max)
+            {
+                target += BIT_VECTOR_int2str(target,min);
+                *target++ = (N_char) ',';
+                target += BIT_VECTOR_int2str(target,max);
+            }
+            else
+            {
+                target += BIT_VECTOR_int2str(target,min);
+                *target++ = (N_char) '-';
+                target += BIT_VECTOR_int2str(target,max);
+            }
+        }
+        comma = TRUE;
+    }
+    *target = (N_char) '\0';
+    return(string);
+}
+
+ErrCode BitVector_from_Enum(wordptr addr, charptr string)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bits = bits_(addr);
+    N_word  state = 1;
+    N_word  token;
+    N_word  indx = 0;          /* silence compiler warning */
+    N_word  start = 0;         /* silence compiler warning */
+
+    if (bits > 0)
+    {
+        BitVector_Empty(addr);
+        while ((not error) and (state != 0))
+        {
+            token = (N_word) *string;
+            /* separate because isdigit() is likely a macro! */
+            if (isdigit((int)token) != 0)
+            {
+                string += BIT_VECTOR_str2int(string,&indx);
+                if (indx < bits) token = (N_word) '0';
+                else error = ErrCode_Indx;
+            }
+            else string++;
+            if (not error)
+            switch (state)
+            {
+                case 1:
+                    switch (token)
+                    {
+                        case (N_word) '0':
+                            state = 2;
+                            break;
+                        case (N_word) '\0':
+                            state = 0;
+                            break;
+                        default:
+                            error = ErrCode_Pars;
+                            break;
+                    }
+                    break;
+                case 2:
+                    switch (token)
+                    {
+                        case (N_word) '-':
+                            start = indx;
+                            state = 3;
+                            break;
+                        case (N_word) ',':
+                            BIT_VECTOR_SET_BIT(addr,indx)
+                            state = 5;
+                            break;
+                        case (N_word) '\0':
+                            BIT_VECTOR_SET_BIT(addr,indx)
+                            state = 0;
+                            break;
+                        default:
+                            error = ErrCode_Pars;
+                            break;
+                    }
+                    break;
+                case 3:
+                    switch (token)
+                    {
+                        case (N_word) '0':
+                            if (start < indx)
+                                BitVector_Interval_Fill(addr,start,indx);
+                            else if (start == indx)
+                                BIT_VECTOR_SET_BIT(addr,indx)
+                            else error = ErrCode_Ordr;
+                            state = 4;
+                            break;
+                        default:
+                            error = ErrCode_Pars;
+                            break;
+                    }
+                    break;
+                case 4:
+                    switch (token)
+                    {
+                        case (N_word) ',':
+                            state = 5;
+                            break;
+                        case (N_word) '\0':
+                            state = 0;
+                            break;
+                        default:
+                            error = ErrCode_Pars;
+                            break;
+                    }
+                    break;
+                case 5:
+                    switch (token)
+                    {
+                        case (N_word) '0':
+                            state = 2;
+                            break;
+                        default:
+                            error = ErrCode_Pars;
+                            break;
+                    }
+                    break;
+            }
+        }
+    }
+    return(error);
+}
+
+void BitVector_Bit_Off(wordptr addr, N_int indx)            /* X = X \ {x}   */
+{
+    if (indx < bits_(addr)) BIT_VECTOR_CLR_BIT(addr,indx)
+}
+
+void BitVector_Bit_On(wordptr addr, N_int indx)             /* X = X + {x}   */
+{
+    if (indx < bits_(addr)) BIT_VECTOR_SET_BIT(addr,indx)
+}
+
+boolean BitVector_bit_flip(wordptr addr, N_int indx)    /* X=(X+{x})\(X*{x}) */
+{
+    N_word mask;
+
+    if (indx < bits_(addr)) return( BIT_VECTOR_FLP_BIT(addr,indx,mask) );
+    else                    return( FALSE );
+}
+
+boolean BitVector_bit_test(wordptr addr, N_int indx)        /* {x} in X ?    */
+{
+    if (indx < bits_(addr)) return( BIT_VECTOR_TST_BIT(addr,indx) );
+    else                    return( FALSE );
+}
+
+void BitVector_Bit_Copy(wordptr addr, N_int indx, boolean bit)
+{
+    if (indx < bits_(addr))
+    {
+        if (bit) BIT_VECTOR_SET_BIT(addr,indx)
+        else     BIT_VECTOR_CLR_BIT(addr,indx)
+    }
+}
+
+void BitVector_LSB(wordptr addr, boolean bit)
+{
+    if (bits_(addr) > 0)
+    {
+        if (bit) *addr |= LSB;
+        else     *addr &= NOT LSB;
+    }
+}
+
+void BitVector_MSB(wordptr addr, boolean bit)
+{
+    N_word size = size_(addr);
+    N_word mask = mask_(addr);
+
+    if (size-- > 0)
+    {
+        if (bit) *(addr+size) |= mask AND NOT (mask >> 1);
+        else     *(addr+size) &= NOT mask OR (mask >> 1);
+    }
+}
+
+boolean BitVector_lsb_(wordptr addr)
+{
+    if (size_(addr) > 0) return( (*addr AND LSB) != 0 );
+    else                 return( FALSE );
+}
+
+boolean BitVector_msb_(wordptr addr)
+{
+    N_word size = size_(addr);
+    N_word mask = mask_(addr);
+
+    if (size-- > 0)
+        return( (*(addr+size) AND (mask AND NOT (mask >> 1))) != 0 );
+    else
+        return( FALSE );
+}
+
+boolean BitVector_rotate_left(wordptr addr)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    N_word  msb;
+    boolean carry_in;
+    boolean carry_out = FALSE;
+
+    if (size > 0)
+    {
+        msb = mask AND NOT (mask >> 1);
+        carry_in = ((*(addr+size-1) AND msb) != 0);
+        while (size-- > 1)
+        {
+            carry_out = ((*addr AND MSB) != 0);
+            *addr <<= 1;
+            if (carry_in) *addr |= LSB;
+            carry_in = carry_out;
+            addr++;
+        }
+        carry_out = ((*addr AND msb) != 0);
+        *addr <<= 1;
+        if (carry_in) *addr |= LSB;
+        *addr &= mask;
+    }
+    return(carry_out);
+}
+
+boolean BitVector_rotate_right(wordptr addr)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    N_word  msb;
+    boolean carry_in;
+    boolean carry_out = FALSE;
+
+    if (size > 0)
+    {
+        msb = mask AND NOT (mask >> 1);
+        carry_in = ((*addr AND LSB) != 0);
+        addr += size-1;
+        *addr &= mask;
+        carry_out = ((*addr AND LSB) != 0);
+        *addr >>= 1;
+        if (carry_in) *addr |= msb;
+        carry_in = carry_out;
+        addr--;
+        size--;
+        while (size-- > 0)
+        {
+            carry_out = ((*addr AND LSB) != 0);
+            *addr >>= 1;
+            if (carry_in) *addr |= MSB;
+            carry_in = carry_out;
+            addr--;
+        }
+    }
+    return(carry_out);
+}
+
+boolean BitVector_shift_left(wordptr addr, boolean carry_in)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    N_word  msb;
+    boolean carry_out = carry_in;
+
+    if (size > 0)
+    {
+        msb = mask AND NOT (mask >> 1);
+        while (size-- > 1)
+        {
+            carry_out = ((*addr AND MSB) != 0);
+            *addr <<= 1;
+            if (carry_in) *addr |= LSB;
+            carry_in = carry_out;
+            addr++;
+        }
+        carry_out = ((*addr AND msb) != 0);
+        *addr <<= 1;
+        if (carry_in) *addr |= LSB;
+        *addr &= mask;
+    }
+    return(carry_out);
+}
+
+boolean BitVector_shift_right(wordptr addr, boolean carry_in)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    N_word  msb;
+    boolean carry_out = carry_in;
+
+    if (size > 0)
+    {
+        msb = mask AND NOT (mask >> 1);
+        addr += size-1;
+        *addr &= mask;
+        carry_out = ((*addr AND LSB) != 0);
+        *addr >>= 1;
+        if (carry_in) *addr |= msb;
+        carry_in = carry_out;
+        addr--;
+        size--;
+        while (size-- > 0)
+        {
+            carry_out = ((*addr AND LSB) != 0);
+            *addr >>= 1;
+            if (carry_in) *addr |= MSB;
+            carry_in = carry_out;
+            addr--;
+        }
+    }
+    return(carry_out);
+}
+
+void BitVector_Move_Left(wordptr addr, N_int bits)
+{
+    N_word count;
+    N_word words;
+
+    if (bits > 0)
+    {
+        count = bits AND MODMASK;
+        words = bits >> LOGBITS;
+        if (bits >= bits_(addr)) BitVector_Empty(addr);
+        else
+        {
+            while (count-- > 0) BitVector_shift_left(addr,0);
+            BitVector_Word_Insert(addr,0,words,TRUE);
+        }
+    }
+}
+
+void BitVector_Move_Right(wordptr addr, N_int bits)
+{
+    N_word count;
+    N_word words;
+
+    if (bits > 0)
+    {
+        count = bits AND MODMASK;
+        words = bits >> LOGBITS;
+        if (bits >= bits_(addr)) BitVector_Empty(addr);
+        else
+        {
+            while (count-- > 0) BitVector_shift_right(addr,0);
+            BitVector_Word_Delete(addr,0,words,TRUE);
+        }
+    }
+}
+
+void BitVector_Insert(wordptr addr, N_int offset, N_int count, boolean clear)
+{
+    N_word bits = bits_(addr);
+    N_word last;
+
+    if ((count > 0) and (offset < bits))
+    {
+        last = offset + count;
+        if (last < bits)
+        {
+            BitVector_Interval_Copy(addr,addr,last,offset,(bits-last));
+        }
+        else last = bits;
+        if (clear) BitVector_Interval_Empty(addr,offset,(last-1));
+    }
+}
+
+void BitVector_Delete(wordptr addr, N_int offset, N_int count, boolean clear)
+{
+    N_word bits = bits_(addr);
+    N_word last;
+
+    if ((count > 0) and (offset < bits))
+    {
+        last = offset + count;
+        if (last < bits)
+        {
+            BitVector_Interval_Copy(addr,addr,offset,last,(bits-last));
+        }
+        else count = bits - offset;
+        if (clear) BitVector_Interval_Empty(addr,(bits-count),(bits-1));
+    }
+}
+
+boolean BitVector_increment(wordptr addr)                   /* X++           */
+{
+    N_word  size  = size_(addr);
+    N_word  mask  = mask_(addr);
+    wordptr last  = addr + size - 1;
+    boolean carry = TRUE;
+
+    if (size > 0)
+    {
+        *last |= NOT mask;
+        while (carry and (size-- > 0))
+        {
+            carry = (++(*addr++) == 0);
+        }
+        *last &= mask;
+    }
+    return(carry);
+}
+
+boolean BitVector_decrement(wordptr addr)                   /* X--           */
+{
+    N_word  size  = size_(addr);
+    N_word  mask  = mask_(addr);
+    wordptr last  = addr + size - 1;
+    boolean carry = TRUE;
+
+    if (size > 0)
+    {
+        *last &= mask;
+        while (carry and (size-- > 0))
+        {
+            carry = (*addr == 0);
+            --(*addr++);
+        }
+        *last &= mask;
+    }
+    return(carry);
+}
+
+boolean BitVector_compute(wordptr X, wordptr Y, wordptr Z, boolean minus, boolean *carry)
+{
+    N_word size = size_(X);
+    N_word mask = mask_(X);
+    N_word vv = 0;
+    N_word cc;
+    N_word mm;
+    N_word yy;
+    N_word zz;
+    N_word lo;
+    N_word hi;
+
+    if (size > 0)
+    {
+        if (minus) cc = (*carry == 0);
+        else       cc = (*carry != 0);
+        /* deal with (size-1) least significant full words first: */
+        while (--size > 0)
+        {
+            yy = *Y++;
+            if (minus) zz = (N_word) NOT ( Z ? *Z++ : 0 );
+            else       zz = (N_word)     ( Z ? *Z++ : 0 );
+            lo = (yy AND LSB) + (zz AND LSB) + cc;
+            hi = (yy >> 1) + (zz >> 1) + (lo >> 1);
+            cc = ((hi AND MSB) != 0);
+            *X++ = (hi << 1) OR (lo AND LSB);
+        }
+        /* deal with most significant word (may be used only partially): */
+        yy = *Y AND mask;
+        if (minus) zz = (N_word) NOT ( Z ? *Z : 0 );
+        else       zz = (N_word)     ( Z ? *Z : 0 );
+        zz &= mask;
+        if (mask == LSB) /* special case, only one bit used */
+        {
+            vv = cc;
+            lo = yy + zz + cc;
+            cc = (lo >> 1);
+            vv ^= cc;
+            *X = lo AND LSB;
+        }
+        else
+        {
+            if (NOT mask) /* not all bits are used, but more than one */
+            {
+                mm = (mask >> 1);
+                vv = (yy AND mm) + (zz AND mm) + cc;
+                mm = mask AND NOT mm;
+                lo = yy + zz + cc;
+                cc = (lo >> 1);
+                vv ^= cc;
+                vv &= mm;
+                cc &= mm;
+                *X = lo AND mask;
+            }
+            else /* other special case, all bits are used */
+            {
+                mm = NOT MSB;
+                lo = (yy AND mm) + (zz AND mm) + cc;
+                vv = lo AND MSB;
+                hi = ((yy AND MSB) >> 1) + ((zz AND MSB) >> 1) + (vv >> 1);
+                cc = hi AND MSB;
+                vv ^= cc;
+                *X = (hi << 1) OR (lo AND mm);
+            }
+        }
+        if (minus) *carry = (cc == 0);
+        else       *carry = (cc != 0);
+    }
+    return(vv != 0);
+}
+
+boolean BitVector_add(wordptr X, wordptr Y, wordptr Z, boolean *carry)
+{
+    return(BitVector_compute(X,Y,Z,FALSE,carry));
+}
+
+boolean BitVector_sub(wordptr X, wordptr Y, wordptr Z, boolean *carry)
+{
+    return(BitVector_compute(X,Y,Z,TRUE,carry));
+}
+
+boolean BitVector_inc(wordptr X, wordptr Y)
+{
+    boolean carry = TRUE;
+
+    return(BitVector_compute(X,Y,NULL,FALSE,&carry));
+}
+
+boolean BitVector_dec(wordptr X, wordptr Y)
+{
+    boolean carry = TRUE;
+
+    return(BitVector_compute(X,Y,NULL,TRUE,&carry));
+}
+
+void BitVector_Negate(wordptr X, wordptr Y)
+{
+    N_word  size  = size_(X);
+    N_word  mask  = mask_(X);
+    boolean carry = TRUE;
+
+    if (size > 0)
+    {
+        while (size-- > 0)
+        {
+            *X = NOT *Y++;
+            if (carry)
+            {
+                carry = (++(*X) == 0);
+            }
+            X++;
+        }
+        *(--X) &= mask;
+    }
+}
+
+void BitVector_Absolute(wordptr X, wordptr Y)
+{
+    N_word size = size_(Y);
+    N_word mask = mask_(Y);
+
+    if (size > 0)
+    {
+        if (*(Y+size-1) AND (mask AND NOT (mask >> 1))) BitVector_Negate(X,Y);
+        else                                             BitVector_Copy(X,Y);
+    }
+}
+
+Z_int BitVector_Sign(wordptr addr)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    wordptr last = addr + size - 1;
+    boolean r    = TRUE;
+
+    if (size > 0)
+    {
+        *last &= mask;
+        while (r and (size-- > 0)) r = ( *addr++ == 0 );
+    }
+    if (r) return((Z_int) 0);
+    else
+    {
+        if (*last AND (mask AND NOT (mask >> 1))) return((Z_int) -1);
+        else                                      return((Z_int)  1);
+    }
+}
+
+ErrCode BitVector_Mul_Pos(wordptr X, wordptr Y, wordptr Z, boolean strict)
+{
+    N_word  mask;
+    N_word  limit;
+    N_word  count;
+    Z_long  last;
+    wordptr sign;
+    boolean carry;
+    boolean overflow;
+    boolean ok = TRUE;
+
+    /*
+       Requirements:
+         -  X, Y and Z must be distinct
+         -  X and Y must have equal sizes (whereas Z may be any size!)
+         -  Z should always contain the SMALLER of the two factors Y and Z
+       Constraints:
+         -  The contents of Y (and of X, of course) are destroyed
+            (only Z is preserved!)
+    */
+
+    if ((X == Y) or (X == Z) or (Y == Z)) return(ErrCode_Same);
+    if (bits_(X) != bits_(Y)) return(ErrCode_Size);
+    BitVector_Empty(X);
+    if (BitVector_is_empty(Y)) return(ErrCode_Ok); /* exit also taken if bits_(Y)==0 */
+    if ((last = Set_Max(Z)) < 0L) return(ErrCode_Ok);
+    limit = (N_word) last;
+    sign = Y + size_(Y) - 1;
+    mask = mask_(Y);
+    *sign &= mask;
+    mask &= NOT (mask >> 1);
+    for ( count = 0; (ok and (count <= limit)); count++ )
+    {
+        if ( BIT_VECTOR_TST_BIT(Z,count) )
+        {
+            carry = false;
+            overflow = BitVector_compute(X,X,Y,false,&carry);
+            if (strict) ok = not (carry or overflow);
+            else        ok = not  carry;
+        }
+        if (ok and (count < limit))
+        {
+            carry = BitVector_shift_left(Y,0);
+            if (strict)
+            {
+                overflow = ((*sign AND mask) != 0);
+                ok = not (carry or overflow);
+            }
+            else ok = not carry;
+        }
+    }
+    if (ok) return(ErrCode_Ok); else return(ErrCode_Ovfl);
+}
+
+ErrCode BitVector_Multiply(wordptr X, wordptr Y, wordptr Z)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bit_x = bits_(X);
+    N_word  bit_y = bits_(Y);
+    N_word  bit_z = bits_(Z);
+    N_word  size;
+    N_word  mask;
+    N_word  msb;
+    wordptr ptr_y;
+    wordptr ptr_z;
+    boolean sgn_x;
+    boolean sgn_y;
+    boolean sgn_z;
+    boolean zero;
+    wordptr A;
+    wordptr B;
+
+    /*
+       Requirements:
+         -  Y and Z must have equal sizes
+         -  X must have at least the same size as Y and Z but may be larger (!)
+       Features:
+         -  The contents of Y and Z are preserved
+         -  X may be identical with Y or Z (or both!)
+            (in-place multiplication is possible!)
+    */
+
+    if ((bit_y != bit_z) or (bit_x < bit_y)) return(ErrCode_Size);
+    if (BitVector_is_empty(Y) or BitVector_is_empty(Z))
+    {
+        BitVector_Empty(X);
+    }
+    else
+    {
+        A = BitVector_Create(bit_y,FALSE);
+        if (A == NULL) return(ErrCode_Null);
+        B = BitVector_Create(bit_z,FALSE);
+        if (B == NULL) { BitVector_Destroy(A); return(ErrCode_Null); }
+        size  = size_(Y);
+        mask  = mask_(Y);
+        msb   = (mask AND NOT (mask >> 1));
+        sgn_y = (((*(Y+size-1) &= mask) AND msb) != 0);
+        sgn_z = (((*(Z+size-1) &= mask) AND msb) != 0);
+        sgn_x = sgn_y XOR sgn_z;
+        if (sgn_y) BitVector_Negate(A,Y); else BitVector_Copy(A,Y);
+        if (sgn_z) BitVector_Negate(B,Z); else BitVector_Copy(B,Z);
+        ptr_y = A + size;
+        ptr_z = B + size;
+        zero = TRUE;
+        while (zero and (size-- > 0))
+        {
+            zero &= (*(--ptr_y) == 0);
+            zero &= (*(--ptr_z) == 0);
+        }
+        if (*ptr_y > *ptr_z)
+        {
+            if (bit_x > bit_y)
+            {
+                A = BitVector_Resize(A,bit_x);
+                if (A == NULL) { BitVector_Destroy(B); return(ErrCode_Null); }
+            }
+            error = BitVector_Mul_Pos(X,A,B,TRUE);
+        }
+        else
+        {
+            if (bit_x > bit_z)
+            {
+                B = BitVector_Resize(B,bit_x);
+                if (B == NULL) { BitVector_Destroy(A); return(ErrCode_Null); }
+            }
+            error = BitVector_Mul_Pos(X,B,A,TRUE);
+        }
+        if ((not error) and sgn_x) BitVector_Negate(X,X);
+        BitVector_Destroy(A);
+        BitVector_Destroy(B);
+    }
+    return(error);
+}
+
+ErrCode BitVector_Div_Pos(wordptr Q, wordptr X, wordptr Y, wordptr R)
+{
+    N_word  bits = bits_(Q);
+    N_word  mask;
+    wordptr addr;
+    Z_long  last;
+    boolean flag;
+    boolean copy = FALSE; /* flags whether valid rest is in R (0) or X (1) */
+
+    /*
+       Requirements:
+         -  All bit vectors must have equal sizes
+         -  Q, X, Y and R must all be distinct bit vectors
+         -  Y must be non-zero (of course!)
+       Constraints:
+         -  The contents of X (and Q and R, of course) are destroyed
+            (only Y is preserved!)
+    */
+
+    if ((bits != bits_(X)) or (bits != bits_(Y)) or (bits != bits_(R)))
+        return(ErrCode_Size);
+    if ((Q == X) or (Q == Y) or (Q == R) or (X == Y) or (X == R) or (Y == R))
+        return(ErrCode_Same);
+    if (BitVector_is_empty(Y))
+        return(ErrCode_Zero);
+
+    BitVector_Empty(R);
+    BitVector_Copy(Q,X);
+    if ((last = Set_Max(Q)) < 0L) return(ErrCode_Ok);
+    bits = (N_word) ++last;
+    while (bits-- > 0)
+    {
+        addr = Q + (bits >> LOGBITS);
+        mask = BITMASKTAB[bits AND MODMASK];
+        flag = ((*addr AND mask) != 0);
+        if (copy)
+        {
+            BitVector_shift_left(X,flag);
+            flag = FALSE;
+            BitVector_compute(R,X,Y,TRUE,&flag);
+        }
+        else
+        {
+            BitVector_shift_left(R,flag);
+            flag = FALSE;
+            BitVector_compute(X,R,Y,TRUE,&flag);
+        }
+        if (flag) *addr &= NOT mask;
+        else
+        {
+            *addr |= mask;
+            copy = not copy;
+        }
+    }
+    if (copy) BitVector_Copy(R,X);
+    return(ErrCode_Ok);
+}
+
+ErrCode BitVector_Divide(wordptr Q, wordptr X, wordptr Y, wordptr R)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bits = bits_(Q);
+    N_word  size = size_(Q);
+    N_word  mask = mask_(Q);
+    N_word  msb = (mask AND NOT (mask >> 1));
+    boolean sgn_q;
+    boolean sgn_x;
+    boolean sgn_y;
+    wordptr A;
+    wordptr B;
+
+    /*
+       Requirements:
+         -  All bit vectors must have equal sizes
+         -  Q and R must be two distinct bit vectors
+         -  Y must be non-zero (of course!)
+       Features:
+         -  The contents of X and Y are preserved
+         -  Q may be identical with X or Y (or both)
+            (in-place division is possible!)
+         -  R may be identical with X or Y (or both)
+            (but not identical with Q!)
+    */
+
+    if ((bits != bits_(X)) or (bits != bits_(Y)) or (bits != bits_(R)))
+        return(ErrCode_Size);
+    if (Q == R)
+        return(ErrCode_Same);
+    if (BitVector_is_empty(Y))
+        return(ErrCode_Zero);
+
+    if (BitVector_is_empty(X))
+    {
+        BitVector_Empty(Q);
+        BitVector_Empty(R);
+    }
+    else
+    {
+        A = BitVector_Create(bits,FALSE);
+        if (A == NULL) return(ErrCode_Null);
+        B = BitVector_Create(bits,FALSE);
+        if (B == NULL) { BitVector_Destroy(A); return(ErrCode_Null); }
+        size--;
+        sgn_x = (((*(X+size) &= mask) AND msb) != 0);
+        sgn_y = (((*(Y+size) &= mask) AND msb) != 0);
+        sgn_q = sgn_x XOR sgn_y;
+        if (sgn_x) BitVector_Negate(A,X); else BitVector_Copy(A,X);
+        if (sgn_y) BitVector_Negate(B,Y); else BitVector_Copy(B,Y);
+        if (not (error = BitVector_Div_Pos(Q,A,B,R)))
+        {
+            if (sgn_q) BitVector_Negate(Q,Q);
+            if (sgn_x) BitVector_Negate(R,R);
+        }
+        BitVector_Destroy(A);
+        BitVector_Destroy(B);
+    }
+    return(error);
+}
+
+ErrCode BitVector_GCD(wordptr X, wordptr Y, wordptr Z)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bits = bits_(X);
+    N_word  size = size_(X);
+    N_word  mask = mask_(X);
+    N_word  msb = (mask AND NOT (mask >> 1));
+    boolean sgn_a;
+    boolean sgn_b;
+    boolean sgn_r;
+    wordptr Q;
+    wordptr R;
+    wordptr A;
+    wordptr B;
+    wordptr T;
+
+    /*
+       Requirements:
+         -  All bit vectors must have equal sizes
+       Features:
+         -  The contents of Y and Z are preserved
+         -  X may be identical with Y or Z (or both)
+            (in-place is possible!)
+         -  GCD(0,z) == GCD(z,0) == z
+         -  negative values are handled correctly
+    */
+
+    if ((bits != bits_(Y)) or (bits != bits_(Z))) return(ErrCode_Size);
+    if (BitVector_is_empty(Y))
+    {
+        if (X != Z) BitVector_Copy(X,Z);
+        return(ErrCode_Ok);
+    }
+    if (BitVector_is_empty(Z))
+    {
+        if (X != Y) BitVector_Copy(X,Y);
+        return(ErrCode_Ok);
+    }
+    Q = BitVector_Create(bits,false);
+    if (Q == NULL)
+    {
+        return(ErrCode_Null);
+    }
+    R = BitVector_Create(bits,FALSE);
+    if (R == NULL)
+    {
+        BitVector_Destroy(Q);
+        return(ErrCode_Null);
+    }
+    A = BitVector_Create(bits,FALSE);
+    if (A == NULL)
+    {
+        BitVector_Destroy(Q);
+        BitVector_Destroy(R);
+        return(ErrCode_Null);
+    }
+    B = BitVector_Create(bits,FALSE);
+    if (B == NULL)
+    {
+        BitVector_Destroy(Q);
+        BitVector_Destroy(R);
+        BitVector_Destroy(A);
+        return(ErrCode_Null);
+    }
+    size--;
+    sgn_a = (((*(Y+size) &= mask) AND msb) != 0);
+    sgn_b = (((*(Z+size) &= mask) AND msb) != 0);
+    if (sgn_a) BitVector_Negate(A,Y); else BitVector_Copy(A,Y);
+    if (sgn_b) BitVector_Negate(B,Z); else BitVector_Copy(B,Z);
+    while (not error)
+    {
+        if (not (error = BitVector_Div_Pos(Q,A,B,R)))
+        {
+            if (BitVector_is_empty(R)) break;
+            T = A; sgn_r = sgn_a;
+            A = B; sgn_a = sgn_b;
+            B = R; sgn_b = sgn_r;
+            R = T;
+        }
+    }
+    if (not error)
+    {
+        if (sgn_b) BitVector_Negate(X,B); else BitVector_Copy(X,B);
+    }
+    BitVector_Destroy(Q);
+    BitVector_Destroy(R);
+    BitVector_Destroy(A);
+    BitVector_Destroy(B);
+    return(error);
+}
+
+ErrCode BitVector_GCD2(wordptr U, wordptr V, wordptr W, wordptr X, wordptr Y)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bits = bits_(U);
+    N_word  size = size_(U);
+    N_word  mask = mask_(U);
+    N_word  msb = (mask AND NOT (mask >> 1));
+    boolean minus;
+    boolean carry;
+    boolean sgn_q;
+    boolean sgn_r;
+    boolean sgn_a;
+    boolean sgn_b;
+    boolean sgn_x;
+    boolean sgn_y;
+    listptr L;
+    wordptr Q;
+    wordptr R;
+    wordptr A;
+    wordptr B;
+    wordptr T;
+    wordptr X1;
+    wordptr X2;
+    wordptr X3;
+    wordptr Y1;
+    wordptr Y2;
+    wordptr Y3;
+    wordptr Z;
+
+    /*
+       Requirements:
+         -  All bit vectors must have equal sizes
+         -  U, V, and W must all be distinct bit vectors
+       Features:
+         -  The contents of X and Y are preserved
+         -  U, V and W may be identical with X or Y (or both,
+            provided that U, V and W are mutually distinct)
+            (i.e., in-place is possible!)
+         -  GCD(0,z) == GCD(z,0) == z
+         -  negative values are handled correctly
+    */
+
+    if ((bits != bits_(V)) or
+        (bits != bits_(W)) or
+        (bits != bits_(X)) or
+        (bits != bits_(Y)))
+    {
+        return(ErrCode_Size);
+    }
+    if ((U == V) or (U == W) or (V == W))
+    {
+        return(ErrCode_Same);
+    }
+    if (BitVector_is_empty(X))
+    {
+        if (U != Y) BitVector_Copy(U,Y);
+        BitVector_Empty(V);
+        BitVector_Empty(W);
+        *W = 1;
+        return(ErrCode_Ok);
+    }
+    if (BitVector_is_empty(Y))
+    {
+        if (U != X) BitVector_Copy(U,X);
+        BitVector_Empty(V);
+        BitVector_Empty(W);
+        *V = 1;
+        return(ErrCode_Ok);
+    }
+    if ((L = BitVector_Create_List(bits,false,11)) == NULL)
+    {
+        return(ErrCode_Null);
+    }
+    Q  = L[0];
+    R  = L[1];
+    A  = L[2];
+    B  = L[3];
+    X1 = L[4];
+    X2 = L[5];
+    X3 = L[6];
+    Y1 = L[7];
+    Y2 = L[8];
+    Y3 = L[9];
+    Z  = L[10];
+    size--;
+    sgn_a = (((*(X+size) &= mask) AND msb) != 0);
+    sgn_b = (((*(Y+size) &= mask) AND msb) != 0);
+    if (sgn_a) BitVector_Negate(A,X); else BitVector_Copy(A,X);
+    if (sgn_b) BitVector_Negate(B,Y); else BitVector_Copy(B,Y);
+    BitVector_Empty(X1);
+    BitVector_Empty(X2);
+    *X1 = 1;
+    BitVector_Empty(Y1);
+    BitVector_Empty(Y2);
+    *Y2 = 1;
+    sgn_x = false;
+    sgn_y = false;
+    while (not error)
+    {
+        if ((error = BitVector_Div_Pos(Q,A,B,R)))
+        {
+            break;
+        }
+        if (BitVector_is_empty(R))
+        {
+            break;
+        }
+        sgn_q = sgn_a XOR sgn_b;
+
+        if (sgn_x) BitVector_Negate(Z,X2); else BitVector_Copy(Z,X2);
+        if ((error = BitVector_Mul_Pos(X3,Z,Q,true)))
+        {
+            break;
+        }
+        minus = not (sgn_x XOR sgn_q);
+        carry = 0;
+        if (BitVector_compute(X3,X1,X3,minus,&carry))
+        {
+            error = ErrCode_Ovfl;
+            break;
+        }
+        sgn_x = (((*(X3+size) &= mask) AND msb) != 0);
+
+        if (sgn_y) BitVector_Negate(Z,Y2); else BitVector_Copy(Z,Y2);
+        if ((error = BitVector_Mul_Pos(Y3,Z,Q,true)))
+        {
+            break;
+        }
+        minus = not (sgn_y XOR sgn_q);
+        carry = 0;
+        if (BitVector_compute(Y3,Y1,Y3,minus,&carry))
+        {
+            error = ErrCode_Ovfl;
+            break;
+        }
+        sgn_y = (((*(Y3+size) &= mask) AND msb) != 0);
+
+        T = A; sgn_r = sgn_a;
+        A = B; sgn_a = sgn_b;
+        B = R; sgn_b = sgn_r;
+        R = T;
+
+        T = X1;
+        X1 = X2;
+        X2 = X3;
+        X3 = T;
+
+        T = Y1;
+        Y1 = Y2;
+        Y2 = Y3;
+        Y3 = T;
+    }
+    if (not error)
+    {
+        if (sgn_b) BitVector_Negate(U,B); else BitVector_Copy(U,B);
+        BitVector_Copy(V,X2);
+        BitVector_Copy(W,Y2);
+    }
+    BitVector_Destroy_List(L,11);
+    return(error);
+}
+
+ErrCode BitVector_Power(wordptr X, wordptr Y, wordptr Z)
+{
+    ErrCode error = ErrCode_Ok;
+    N_word  bits  = bits_(X);
+    boolean first = TRUE;
+    Z_long  last;
+    N_word  limit;
+    N_word  count;
+    wordptr T;
+
+    /*
+       Requirements:
+         -  X must have at least the same size as Y but may be larger (!)
+         -  X may not be identical with Z
+         -  Z must be positive
+       Features:
+         -  The contents of Y and Z are preserved
+    */
+
+    if (X == Z) return(ErrCode_Same);
+    if (bits < bits_(Y)) return(ErrCode_Size);
+    if (BitVector_msb_(Z)) return(ErrCode_Expo);
+    if ((last = Set_Max(Z)) < 0L)
+    {
+        if (bits < 2) return(ErrCode_Ovfl);
+        BitVector_Empty(X);
+        *X |= LSB;
+        return(ErrCode_Ok);                             /* anything ^ 0 == 1 */
+    }
+    if (BitVector_is_empty(Y))
+    {
+        if (X != Y) BitVector_Empty(X);
+        return(ErrCode_Ok);                    /* 0 ^ anything not zero == 0 */
+    }
+    T = BitVector_Create(bits,FALSE);
+    if (T == NULL) return(ErrCode_Null);
+    limit = (N_word) last;
+    for ( count = 0; ((!error) and (count <= limit)); count++ )
+    {
+        if ( BIT_VECTOR_TST_BIT(Z,count) )
+        {
+            if (first)
+            {
+                first = FALSE;
+                if (count) {             BitVector_Copy(X,T); }
+                else       { if (X != Y) BitVector_Copy(X,Y); }
+            }
+            else error = BitVector_Multiply(X,T,X); /* order important because T > X */
+        }
+        if ((!error) and (count < limit))
+        {
+            if (count) error = BitVector_Multiply(T,T,T);
+            else       error = BitVector_Multiply(T,Y,Y);
+        }
+    }
+    BitVector_Destroy(T);
+    return(error);
+}
+
+void BitVector_Block_Store(wordptr addr, charptr buffer, N_int length)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    N_word  value;
+    N_word  count;
+
+    /* provide translation for independence of endian-ness: */
+    if (size > 0)
+    {
+        while (size-- > 0)
+        {
+            value = 0;
+            for ( count = 0; (length > 0) and (count < BITS); count += 8 )
+            {
+                value |= (((N_word) *buffer++) << count); length--;
+            }
+            *addr++ = value;
+        }
+        *(--addr) &= mask;
+    }
+}
+
+charptr BitVector_Block_Read(wordptr addr, N_intptr length)
+{
+    N_word  size = size_(addr);
+    N_word  value;
+    N_word  count;
+    charptr buffer;
+    charptr target;
+
+    /* provide translation for independence of endian-ness: */
+    *length = size << FACTOR;
+    buffer = (charptr) yasm_xmalloc((size_t) ((*length)+1));
+    if (buffer == NULL) return(NULL);
+    target = buffer;
+    if (size > 0)
+    {
+        *(addr+size-1) &= mask_(addr);
+        while (size-- > 0)
+        {
+            value = *addr++;
+            count = BITS >> 3;
+            while (count-- > 0)
+            {
+                *target++ = (N_char) (value AND 0x00FF);
+                if (count > 0) value >>= 8;
+            }
+        }
+    }
+    *target = (N_char) '\0';
+    return(buffer);
+}
+
+void BitVector_Word_Store(wordptr addr, N_int offset, N_int value)
+{
+    N_word size = size_(addr);
+
+    if (size > 0)
+    {
+        if (offset < size) *(addr+offset) = value;
+        *(addr+size-1) &= mask_(addr);
+    }
+}
+
+N_int BitVector_Word_Read(wordptr addr, N_int offset)
+{
+    N_word size = size_(addr);
+
+    if (size > 0)
+    {
+        *(addr+size-1) &= mask_(addr);
+        if (offset < size) return( *(addr+offset) );
+    }
+    return( (N_int) 0 );
+}
+
+void BitVector_Word_Insert(wordptr addr, N_int offset, N_int count,
+                           boolean clear)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    wordptr last = addr+size-1;
+
+    if (size > 0)
+    {
+        *last &= mask;
+        if (offset > size) offset = size;
+        BIT_VECTOR_ins_words(addr+offset,size-offset,count,clear);
+        *last &= mask;
+    }
+}
+
+void BitVector_Word_Delete(wordptr addr, N_int offset, N_int count,
+                           boolean clear)
+{
+    N_word  size = size_(addr);
+    N_word  mask = mask_(addr);
+    wordptr last = addr+size-1;
+
+    if (size > 0)
+    {
+        *last &= mask;
+        if (offset > size) offset = size;
+        BIT_VECTOR_del_words(addr+offset,size-offset,count,clear);
+        *last &= mask;
+    }
+}
+
+void BitVector_Chunk_Store(wordptr addr, N_int chunksize, N_int offset,
+                           N_long value)
+{
+    N_word bits = bits_(addr);
+    N_word mask;
+    N_word temp;
+
+    if ((chunksize > 0) and (offset < bits))
+    {
+        if (chunksize > LONGBITS) chunksize = LONGBITS;
+        if ((offset + chunksize) > bits) chunksize = bits - offset;
+        addr += offset >> LOGBITS;
+        offset &= MODMASK;
+        while (chunksize > 0)
+        {
+            mask = (N_word) (~0L << offset);
+            bits = offset + chunksize;
+            if (bits < BITS)
+            {
+                mask &= (N_word) ~(~0L << bits);
+                bits = chunksize;
+            }
+            else bits = BITS - offset;
+            temp = (N_word) (value << offset);
+            temp &= mask;
+            *addr &= NOT mask;
+            *addr++ |= temp;
+            value >>= bits;
+            chunksize -= bits;
+            offset = 0;
+        }
+    }
+}
+
+N_long BitVector_Chunk_Read(wordptr addr, N_int chunksize, N_int offset)
+{
+    N_word bits = bits_(addr);
+    N_word chunkbits = 0;
+    N_long value = 0L;
+    N_long temp;
+    N_word mask;
+
+    if ((chunksize > 0) and (offset < bits))
+    {
+        if (chunksize > LONGBITS) chunksize = LONGBITS;
+        if ((offset + chunksize) > bits) chunksize = bits - offset;
+        addr += offset >> LOGBITS;
+        offset &= MODMASK;
+        while (chunksize > 0)
+        {
+            bits = offset + chunksize;
+            if (bits < BITS)
+            {
+                mask = (N_word) ~(~0L << bits);
+                bits = chunksize;
+            }
+            else
+            {
+                mask = (N_word) ~0L;
+                bits = BITS - offset;
+            }
+            temp = (N_long) ((*addr++ AND mask) >> offset);
+            value |= temp << chunkbits;
+            chunkbits += bits;
+            chunksize -= bits;
+            offset = 0;
+        }
+    }
+    return(value);
+}
+
+    /*******************/
+    /* set operations: */
+    /*******************/
+
+void Set_Union(wordptr X, wordptr Y, wordptr Z)             /* X = Y + Z     */
+{
+    N_word bits = bits_(X);
+    N_word size = size_(X);
+    N_word mask = mask_(X);
+
+    if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z)))
+    {
+        while (size-- > 0) *X++ = *Y++ OR *Z++;
+        *(--X) &= mask;
+    }
+}
+
+void Set_Intersection(wordptr X, wordptr Y, wordptr Z)      /* X = Y * Z     */
+{
+    N_word bits = bits_(X);
+    N_word size = size_(X);
+    N_word mask = mask_(X);
+
+    if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z)))
+    {
+        while (size-- > 0) *X++ = *Y++ AND *Z++;
+        *(--X) &= mask;
+    }
+}
+
+void Set_Difference(wordptr X, wordptr Y, wordptr Z)        /* X = Y \ Z     */
+{
+    N_word bits = bits_(X);
+    N_word size = size_(X);
+    N_word mask = mask_(X);
+
+    if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z)))
+    {
+        while (size-- > 0) *X++ = *Y++ AND NOT *Z++;
+        *(--X) &= mask;
+    }
+}
+
+void Set_ExclusiveOr(wordptr X, wordptr Y, wordptr Z)       /* X=(Y+Z)\(Y*Z) */
+{
+    N_word bits = bits_(X);
+    N_word size = size_(X);
+    N_word mask = mask_(X);
+
+    if ((size > 0) and (bits == bits_(Y)) and (bits == bits_(Z)))
+    {
+        while (size-- > 0) *X++ = *Y++ XOR *Z++;
+        *(--X) &= mask;
+    }
+}
+
+void Set_Complement(wordptr X, wordptr Y)                   /* X = ~Y        */
+{
+    N_word size = size_(X);
+    N_word mask = mask_(X);
+
+    if ((size > 0) and (bits_(X) == bits_(Y)))
+    {
+        while (size-- > 0) *X++ = NOT *Y++;
+        *(--X) &= mask;
+    }
+}
+
+    /******************/
+    /* set functions: */
+    /******************/
+
+boolean Set_subset(wordptr X, wordptr Y)                    /* X subset Y ?  */
+{
+    N_word size = size_(X);
+    boolean r = FALSE;
+
+    if ((size > 0) and (bits_(X) == bits_(Y)))
+    {
+        r = TRUE;
+        while (r and (size-- > 0)) r = ((*X++ AND NOT *Y++) == 0);
+    }
+    return(r);
+}
+
+N_int Set_Norm(wordptr addr)                                /* = | X |       */
+{
+    byteptr byte;
+    N_word  bytes;
+    N_int   n;
+
+    byte = (byteptr) addr;
+    bytes = size_(addr) << FACTOR;
+    n = 0;
+    while (bytes-- > 0)
+    {
+        n += BitVector_BYTENORM[*byte++];
+    }
+    return(n);
+}
+
+N_int Set_Norm2(wordptr addr)                               /* = | X |       */
+{
+    N_word  size = size_(addr);
+    N_word  w0,w1;
+    N_int   n,k;
+
+    n = 0;
+    while (size-- > 0)
+    {
+        k = 0;
+        w1 = NOT (w0 = *addr++);
+        while (w0 and w1)
+        {
+            w0 &= w0 - 1;
+            w1 &= w1 - 1;
+            k++;
+        }
+        if (w0 == 0) n += k;
+        else         n += BITS - k;
+    }
+    return(n);
+}
+
+N_int Set_Norm3(wordptr addr)                               /* = | X |       */
+{
+    N_word  size  = size_(addr);
+    N_int   count = 0;
+    N_word  c;
+
+    while (size-- > 0)
+    {
+        c = *addr++;
+        while (c)
+        {
+            c &= c - 1;
+            count++;
+        }
+    }
+    return(count);
+}
+
+Z_long Set_Min(wordptr addr)                                /* = min(X)      */
+{
+    boolean empty = TRUE;
+    N_word  size  = size_(addr);
+    N_word  i     = 0;
+    N_word  c     = 0;         /* silence compiler warning */
+
+    while (empty and (size-- > 0))
+    {
+        if ((c = *addr++)) empty = false; else i++;
+    }
+    if (empty) return((Z_long) LONG_MAX);                  /* plus infinity  */
+    i <<= LOGBITS;
+    while (not (c AND LSB))
+    {
+        c >>= 1;
+        i++;
+    }
+    return((Z_long) i);
+}
+
+Z_long Set_Max(wordptr addr)                                /* = max(X)      */
+{
+    boolean empty = TRUE;
+    N_word  size  = size_(addr);
+    N_word  i     = size;
+    N_word  c     = 0;         /* silence compiler warning */
+
+    addr += size-1;
+    while (empty and (size-- > 0))
+    {
+        if ((c = *addr--)) empty = false; else i--;
+    }
+    if (empty) return((Z_long) LONG_MIN);                  /* minus infinity */
+    i <<= LOGBITS;
+    while (not (c AND MSB))
+    {
+        c <<= 1;
+        i--;
+    }
+    return((Z_long) --i);
+}
+
+    /**********************************/
+    /* matrix-of-booleans operations: */
+    /**********************************/
+
+void Matrix_Multiplication(wordptr X, N_int rowsX, N_int colsX,
+                           wordptr Y, N_int rowsY, N_int colsY,
+                           wordptr Z, N_int rowsZ, N_int colsZ)
+{
+    N_word i;
+    N_word j;
+    N_word k;
+    N_word indxX;
+    N_word indxY;
+    N_word indxZ;
+    N_word termX;
+    N_word termY;
+    N_word sum;
+
+  if ((colsY == rowsZ) and (rowsX == rowsY) and (colsX == colsZ) and
+      (bits_(X) == rowsX*colsX) and
+      (bits_(Y) == rowsY*colsY) and
+      (bits_(Z) == rowsZ*colsZ))
+  {
+    for ( i = 0; i < rowsY; i++ )
+    {
+        termX = i * colsX;
+        termY = i * colsY;
+        for ( j = 0; j < colsZ; j++ )
+        {
+            indxX = termX + j;
+            sum = 0;
+            for ( k = 0; k < colsY; k++ )
+            {
+                indxY = termY + k;
+                indxZ = k * colsZ + j;
+                if ( BIT_VECTOR_TST_BIT(Y,indxY) &&
+                     BIT_VECTOR_TST_BIT(Z,indxZ) ) sum ^= 1;
+            }
+            if (sum) BIT_VECTOR_SET_BIT(X,indxX)
+            else     BIT_VECTOR_CLR_BIT(X,indxX)
+        }
+    }
+  }
+}
+
+void Matrix_Product(wordptr X, N_int rowsX, N_int colsX,
+                    wordptr Y, N_int rowsY, N_int colsY,
+                    wordptr Z, N_int rowsZ, N_int colsZ)
+{
+    N_word i;
+    N_word j;
+    N_word k;
+    N_word indxX;
+    N_word indxY;
+    N_word indxZ;
+    N_word termX;
+    N_word termY;
+    N_word sum;
+
+  if ((colsY == rowsZ) and (rowsX == rowsY) and (colsX == colsZ) and
+      (bits_(X) == rowsX*colsX) and
+      (bits_(Y) == rowsY*colsY) and
+      (bits_(Z) == rowsZ*colsZ))
+  {
+    for ( i = 0; i < rowsY; i++ )
+    {
+        termX = i * colsX;
+        termY = i * colsY;
+        for ( j = 0; j < colsZ; j++ )
+        {
+            indxX = termX + j;
+            sum = 0;
+            for ( k = 0; k < colsY; k++ )
+            {
+                indxY = termY + k;
+                indxZ = k * colsZ + j;
+                if ( BIT_VECTOR_TST_BIT(Y,indxY) &&
+                     BIT_VECTOR_TST_BIT(Z,indxZ) ) sum |= 1;
+            }
+            if (sum) BIT_VECTOR_SET_BIT(X,indxX)
+            else     BIT_VECTOR_CLR_BIT(X,indxX)
+        }
+    }
+  }
+}
+
+void Matrix_Closure(wordptr addr, N_int rows, N_int cols)
+{
+    N_word i;
+    N_word j;
+    N_word k;
+    N_word ii;
+    N_word ij;
+    N_word ik;
+    N_word kj;
+    N_word termi;
+    N_word termk;
+
+  if ((rows == cols) and (bits_(addr) == rows*cols))
+  {
+    for ( i = 0; i < rows; i++ )
+    {
+        ii = i * cols + i;
+        BIT_VECTOR_SET_BIT(addr,ii)
+    }
+    for ( k = 0; k < rows; k++ )
+    {
+        termk = k * cols;
+        for ( i = 0; i < rows; i++ )
+        {
+            termi = i * cols;
+            ik = termi + k;
+            for ( j = 0; j < rows; j++ )
+            {
+                ij = termi + j;
+                kj = termk + j;
+                if ( BIT_VECTOR_TST_BIT(addr,ik) &&
+                     BIT_VECTOR_TST_BIT(addr,kj) )
+                     BIT_VECTOR_SET_BIT(addr,ij)
+            }
+        }
+    }
+  }
+}
+
+void Matrix_Transpose(wordptr X, N_int rowsX, N_int colsX,
+                      wordptr Y, N_int rowsY, N_int colsY)
+{
+    N_word  i;
+    N_word  j;
+    N_word  ii;
+    N_word  ij;
+    N_word  ji;
+    N_word  addii;
+    N_word  addij;
+    N_word  addji;
+    N_word  bitii;
+    N_word  bitij;
+    N_word  bitji;
+    N_word  termi;
+    N_word  termj;
+    boolean swap;
+
+  /* BEWARE that "in-place" is ONLY possible if the matrix is quadratic!! */
+
+  if ((rowsX == colsY) and (colsX == rowsY) and
+      (bits_(X) == rowsX*colsX) and
+      (bits_(Y) == rowsY*colsY))
+  {
+    if (rowsY == colsY) /* in-place is possible! */
+    {
+        for ( i = 0; i < rowsY; i++ )
+        {
+            termi = i * colsY;
+            for ( j = 0; j < i; j++ )
+            {
+                termj = j * colsX;
+                ij = termi + j;
+                ji = termj + i;
+                addij = ij >> LOGBITS;
+                addji = ji >> LOGBITS;
+                bitij = BITMASKTAB[ij AND MODMASK];
+                bitji = BITMASKTAB[ji AND MODMASK];
+                swap = ((*(Y+addij) AND bitij) != 0);
+                if ((*(Y+addji) AND bitji) != 0)
+                     *(X+addij) |=     bitij;
+                else
+                     *(X+addij) &= NOT bitij;
+                if (swap)
+                     *(X+addji) |=     bitji;
+                else
+                     *(X+addji) &= NOT bitji;
+            }
+            ii = termi + i;
+            addii = ii >> LOGBITS;
+            bitii = BITMASKTAB[ii AND MODMASK];
+            if ((*(Y+addii) AND bitii) != 0)
+                 *(X+addii) |=     bitii;
+            else
+                 *(X+addii) &= NOT bitii;
+        }
+    }
+    else /* rowsX != colsX, in-place is NOT possible! */
+    {
+        for ( i = 0; i < rowsY; i++ )
+        {
+            termi = i * colsY;
+            for ( j = 0; j < colsY; j++ )
+            {
+                termj = j * colsX;
+                ij = termi + j;
+                ji = termj + i;
+                addij = ij >> LOGBITS;
+                addji = ji >> LOGBITS;
+                bitij = BITMASKTAB[ij AND MODMASK];
+                bitji = BITMASKTAB[ji AND MODMASK];
+                if ((*(Y+addij) AND bitij) != 0)
+                     *(X+addji) |=     bitji;
+                else
+                     *(X+addji) &= NOT bitji;
+            }
+        }
+    }
+  }
+}
+
+/*****************************************************************************/
+/*  VERSION:  6.4                                                            */
+/*****************************************************************************/
+/*  VERSION HISTORY:                                                         */
+/*****************************************************************************/
+/*                                                                           */
+/*    Version 6.4  03.10.04  Added C++ comp. directives. Improved "Norm()".  */
+/*    Version 6.3  28.09.02  Added "Create_List()" and "GCD2()".             */
+/*    Version 6.2  15.09.02  Overhauled error handling. Fixed "GCD()".       */
+/*    Version 6.1  08.10.01  Make VMS linker happy: _lsb,_msb => _lsb_,_msb_ */
+/*    Version 6.0  08.10.00  Corrected overflow handling.                    */
+/*    Version 5.8  14.07.00  Added "Power()". Changed "Copy()".              */
+/*    Version 5.7  19.05.99  Quickened "Div_Pos()". Added "Product()".       */
+/*    Version 5.6  02.11.98  Leading zeros eliminated in "to_Hex()".         */
+/*    Version 5.5  21.09.98  Fixed bug of uninitialized "error" in Multiply. */
+/*    Version 5.4  07.09.98  Fixed bug of uninitialized "error" in Divide.   */
+/*    Version 5.3  12.05.98  Improved Norm. Completed history.               */
+/*    Version 5.2  31.03.98  Improved Norm.                                  */
+/*    Version 5.1  09.03.98  No changes.                                     */
+/*    Version 5.0  01.03.98  Major additions and rewrite.                    */
+/*    Version 4.2  16.07.97  Added is_empty, is_full.                        */
+/*    Version 4.1  30.06.97  Added word-ins/del, move-left/right, inc/dec.   */
+/*    Version 4.0  23.04.97  Rewrite. Added bit shift and bool. matrix ops.  */
+/*    Version 3.2  04.02.97  Added interval methods.                         */
+/*    Version 3.1  21.01.97  Fixed bug on 64 bit machines.                   */
+/*    Version 3.0  12.01.97  Added flip.                                     */
+/*    Version 2.0  14.12.96  Efficiency and consistency improvements.        */
+/*    Version 1.1  08.01.96  Added Resize and ExclusiveOr.                   */
+/*    Version 1.0  14.12.95  First version under UNIX (with Perl module).    */
+/*    Version 0.9  01.11.93  First version of C library under MS-DOS.        */
+/*    Version 0.1  ??.??.89  First version in Turbo Pascal under CP/M.       */
+/*                                                                           */
+/*****************************************************************************/
+/*  AUTHOR:                                                                  */
+/*****************************************************************************/
+/*                                                                           */
+/*    Steffen Beyer                                                          */
+/*    mailto:sb@engelschall.com                                              */
+/*    http://www.engelschall.com/u/sb/download/                              */
+/*                                                                           */
+/*****************************************************************************/
+/*  COPYRIGHT:                                                               */
+/*****************************************************************************/
+/*                                                                           */
+/*    Copyright (c) 1995 - 2004 by Steffen Beyer.                            */
+/*    All rights reserved.                                                   */
+/*                                                                           */
+/*****************************************************************************/
+/*  LICENSE:                                                                 */
+/*****************************************************************************/
+/* This package is free software; you can use, modify and redistribute       */
+/* it under the same terms as Perl itself, i.e., under the terms of          */
+/* the "Artistic License" or the "GNU General Public License".               */
+/*                                                                           */
+/* The C library at the core of this Perl module can additionally            */
+/* be used, modified and redistributed under the terms of the                */
+/* "GNU Library General Public License".                                     */
+/*                                                                           */
+/*****************************************************************************/
+/*  ARTISTIC LICENSE:                                                        */
+/*****************************************************************************/
+/*
+                         The "Artistic License"
+
+                                Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
+
+Definitions:
+
+        "Package" refers to the collection of files distributed by the
+        Copyright Holder, and derivatives of that collection of files
+        created through textual modification.
+
+        "Standard Version" refers to such a Package if it has not been
+        modified, or has been modified in accordance with the wishes
+        of the Copyright Holder as specified below.
+
+        "Copyright Holder" is whoever is named in the copyright or
+        copyrights for the package.
+
+        "You" is you, if you're thinking about copying or distributing
+        this Package.
+
+        "Reasonable copying fee" is whatever you can justify on the
+        basis of media cost, duplication charges, time of people involved,
+        and so on.  (You will not be required to justify it to the
+        Copyright Holder, but only to the computing community at large
+        as a market that must bear the fee.)
+
+        "Freely Available" means that no fee is charged for the item
+        itself, though there may be fees involved in handling the item.
+        It also means that recipients of the item may redistribute it
+        under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder.  A Package
+modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
+
+    a) place your modifications in the Public Domain or otherwise make them
+    Freely Available, such as by posting said modifications to Usenet or
+    an equivalent medium, or placing the modifications on a major archive
+    site such as uunet.uu.net, or by allowing the Copyright Holder to include
+    your modifications in the Standard Version of the Package.
+
+    b) use the modified Package only within your corporation or organization.
+
+    c) rename any non-standard executables so the names do not conflict
+    with standard executables, which must also be provided, and provide
+    a separate manual page for each non-standard executable that clearly
+    documents how it differs from the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+    a) distribute a Standard Version of the executables and library files,
+    together with instructions (in the manual page or equivalent) on where
+    to get the Standard Version.
+
+    b) accompany the distribution with the machine-readable source of
+    the Package with your modifications.
+
+    c) give non-standard executables non-standard names, and clearly
+    document the differences in manual pages (or equivalent), together
+    with instructions on where to get the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this
+Package.  You may not charge a fee for this Package itself.  However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own.  You may embed this Package's interpreter within
+an executable of yours (by linking); this shall be construed as a mere
+form of aggregation, provided that the complete Standard Version of the
+interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whoever generated
+them, and may be sold commercially, and may be aggregated with this
+Package.  If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. C subroutines (or comparably compiled subroutines in other
+languages) supplied by you and linked into this Package in order to
+emulate subroutines and variables of the language defined by this
+Package shall not be considered part of this Package, but are the
+equivalent of input as in Paragraph 6, provided these subroutines do
+not change the language in any way that would cause it to fail the
+regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always
+permitted provided that the use of this Package is embedded; that is,
+when no overt attempt is made to make this Package's interfaces visible
+to the end user of the commercial distribution.  Such use shall not be
+construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+                                The End
+*/
+/*****************************************************************************/
+/*  GNU GENERAL PUBLIC LICENSE:                                              */
+/*****************************************************************************/
+/* This program is free software; you can redistribute it and/or             */
+/* modify it under the terms of the GNU General Public License               */
+/* as published by the Free Software Foundation; either version 2            */
+/* of the License, or (at your option) any later version.                    */
+/*                                                                           */
+/* This program is distributed in the hope that it will be useful,           */
+/* but WITHOUT ANY WARRANTY; without even the implied warranty of            */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             */
+/* GNU General Public License for more details.                              */
+/*                                                                           */
+/* You should have received a copy of the GNU General Public License         */
+/* along with this program; if not, write to the                             */
+/* Free Software Foundation, Inc.,                                           */
+/* 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                 */
+/*                                                                           */
+/*****************************************************************************/
+/*  GNU LIBRARY GENERAL PUBLIC LICENSE:                                      */
+/*****************************************************************************/
+/*    This library is free software; you can redistribute it and/or          */
+/*    modify it under the terms of the GNU Library General Public            */
+/*    License as published by the Free Software Foundation; either           */
+/*    version 2 of the License, or (at your option) any later version.       */
+/*                                                                           */
+/*    This library is distributed in the hope that it will be useful,        */
+/*    but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU       */
+/*    Library General Public License for more details.                       */
+/*                                                                           */
+/*    You should have received a copy of the GNU Library General Public      */
+/*    License along with this library; if not, write to the                  */
+/*    Free Software Foundation, Inc.,                                        */
+/*    59 Temple Place, Suite 330, Boston, MA 02111-1307 USA                  */
+/*                                                                           */
+/*    or download a copy from ftp://ftp.gnu.org/pub/gnu/COPYING.LIB-2.0      */
+/*                                                                           */
+/*****************************************************************************/
</ins></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcethird_partyyasm130libyasmbitvecth"></a>
<div class="addfile"><h4>Added: trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.h (0 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.h                                (rev 0)
+++ trunk/Source/ThirdParty/libwebrtc/Source/third_party/yasm-1.3.0/libyasm/bitvect.h   2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -0,0 +1,669 @@
</span><ins>+// [Apple note:  bitvect.c and bitvect.h are triple licensed under the GPL, LGPL and Artistic license.
+// Apple chooses to use and redistribute the software under the terms of the Artistic license.]
+
+#ifndef YASM_BITVECT_H
+#define YASM_BITVECT_H
+/*****************************************************************************/
+/*  MODULE NAME:  BitVector.h                           MODULE TYPE:  (adt)  */
+/*****************************************************************************/
+/*  MODULE IMPORTS:                                                          */
+/*****************************************************************************/
+
+/* ToolBox.h */
+/*****************************************************************************/
+/*  NOTE: The type names that have been chosen here are somewhat weird on    */
+/*        purpose, in order to avoid name clashes with system header files   */
+/*        and your own application(s) which might - directly or indirectly - */
+/*        include this definitions file.                                     */
+/*****************************************************************************/
+#ifndef YASM_LIB_DECL
+#define YASM_LIB_DECL
+#endif
+
+typedef  unsigned   char    N_char;
+typedef  unsigned   char    N_byte;
+typedef  unsigned   short   N_short;
+typedef  unsigned   short   N_shortword;
+typedef  unsigned   int     N_int;
+typedef  unsigned   int     N_word;
+typedef  unsigned   long    N_long;
+typedef  unsigned   long    N_longword;
+
+/*  Mnemonic 1:  The natural numbers,  N = { 0, 1, 2, 3, ... }               */
+/*  Mnemonic 2:  Nnnn = u_N_signed,  _N_ot signed                            */
+
+typedef  signed     char    Z_char;
+typedef  signed     char    Z_byte;
+typedef  signed     short   Z_short;
+typedef  signed     short   Z_shortword;
+typedef  signed     int     Z_int;
+typedef  signed     int     Z_word;
+typedef  signed     long    Z_long;
+typedef  signed     long    Z_longword;
+
+/*  Mnemonic 1:  The whole numbers,  Z = { 0, -1, 1, -2, 2, -3, 3, ... }     */
+/*  Mnemonic 2:  Zzzz = Ssss_igned                                           */
+
+typedef  void               *voidptr;
+typedef  N_char             *charptr;
+typedef  N_byte             *byteptr;
+typedef  N_short            *shortptr;
+typedef  N_shortword        *shortwordptr;
+typedef  N_int              *intptr;
+typedef  N_word             *wordptr;
+typedef  N_long             *longptr;
+typedef  N_longword         *longwordptr;
+
+typedef  N_char             *N_charptr;
+typedef  N_byte             *N_byteptr;
+typedef  N_short            *N_shortptr;
+typedef  N_shortword        *N_shortwordptr;
+typedef  N_int              *N_intptr;
+typedef  N_word             *N_wordptr;
+typedef  N_long             *N_longptr;
+typedef  N_longword         *N_longwordptr;
+
+typedef  Z_char             *Z_charptr;
+typedef  Z_byte             *Z_byteptr;
+typedef  Z_short            *Z_shortptr;
+typedef  Z_shortword        *Z_shortwordptr;
+typedef  Z_int              *Z_intptr;
+typedef  Z_word             *Z_wordptr;
+typedef  Z_long             *Z_longptr;
+typedef  Z_longword         *Z_longwordptr;
+
+#ifndef FALSE
+#define FALSE       (0!=0)
+#endif
+
+#ifndef TRUE
+#define TRUE        (0==0)
+#endif
+
+#ifdef __cplusplus
+    typedef bool boolean;
+#else
+    #ifdef MACOS_TRADITIONAL
+        #define boolean Boolean
+    #else
+        typedef enum boolean { false = FALSE, true = TRUE } boolean;
+    #endif
+#endif
+
+/*****************************************************************************/
+/*  MODULE INTERFACE:                                                        */
+/*****************************************************************************/
+
+typedef enum ErrCode
+    {
+        ErrCode_Ok = 0,    /* everything went allright                       */
+
+        ErrCode_Type,      /* types word and size_t have incompatible sizes  */
+        ErrCode_Bits,      /* bits of word and sizeof(word) are inconsistent */
+        ErrCode_Word,      /* size of word is less than 16 bits              */
+        ErrCode_Long,      /* size of word is greater than size of long      */
+        ErrCode_Powr,      /* number of bits of word is not a power of two   */
+        ErrCode_Loga,      /* error in calculation of logarithm              */
+
+        ErrCode_Null,      /* unable to allocate memory                      */
+
+        ErrCode_Indx,      /* index out of range                             */
+        ErrCode_Ordr,      /* minimum > maximum index                        */
+        ErrCode_Size,      /* bit vector size mismatch                       */
+        ErrCode_Pars,      /* input string syntax error                      */
+        ErrCode_Ovfl,      /* numeric overflow error                         */
+        ErrCode_Same,      /* operands must be distinct                      */
+        ErrCode_Expo,      /* exponent must be positive                      */
+        ErrCode_Zero       /* division by zero error                         */
+    } ErrCode;
+
+typedef wordptr *listptr;
+
+/* ===> MISCELLANEOUS BASIC FUNCTIONS: <=== */
+
+YASM_LIB_DECL
+const char * BitVector_Error      (ErrCode error);  /* return string for err code */
+
+YASM_LIB_DECL
+ErrCode BitVector_Boot       (void);                 /* 0 = ok, 1..7 = error */
+YASM_LIB_DECL
+void    BitVector_Shutdown   (void);                            /* undo Boot */
+
+YASM_LIB_DECL
+N_word  BitVector_Size       (N_int bits);  /* bit vector size (# of words)  */
+YASM_LIB_DECL
+N_word  BitVector_Mask       (N_int bits);  /* bit vector mask (unused bits) */
+
+/* ===> CLASS METHODS: <=== */
+
+YASM_LIB_DECL
+const char * BitVector_Version    (void);          /* returns version string */
+
+YASM_LIB_DECL
+N_int   BitVector_Word_Bits  (void);     /* return # of bits in machine word */
+YASM_LIB_DECL
+N_int   BitVector_Long_Bits  (void);    /* return # of bits in unsigned long */
+
+/* ===> CONSTRUCTOR METHODS: <=== */
+
+YASM_LIB_DECL
+/*@only@*/ wordptr BitVector_Create     (N_int bits, boolean clear);          /* malloc */
+YASM_LIB_DECL
+listptr BitVector_Create_List(N_int bits, boolean clear, N_int count);
+
+YASM_LIB_DECL
+wordptr BitVector_Resize     (wordptr oldaddr, N_int bits);       /* realloc */
+
+YASM_LIB_DECL
+wordptr BitVector_Shadow     (wordptr addr); /* make new same size but empty */
+YASM_LIB_DECL
+wordptr BitVector_Clone      (wordptr addr);         /* make exact duplicate */
+
+YASM_LIB_DECL
+wordptr BitVector_Concat     (wordptr X, wordptr Y); /* return concatenation */
+
+/* ===> DESTRUCTOR METHODS: <=== */
+
+YASM_LIB_DECL
+void    BitVector_Dispose            (/*@only@*/ /*@out@*/ charptr string);             /* string */
+YASM_LIB_DECL
+void    BitVector_Destroy            (/*@only@*/ wordptr addr);               /* bitvec */
+YASM_LIB_DECL
+void    BitVector_Destroy_List       (listptr list, N_int count);  /* list   */
+
+/* ===> OBJECT METHODS: <=== */
+
+/* ===> bit vector copy function: */
+
+YASM_LIB_DECL
+void    BitVector_Copy       (wordptr X, wordptr Y);              /* X = Y   */
+
+/* ===> bit vector initialization: */
+
+YASM_LIB_DECL
+void    BitVector_Empty      (wordptr addr);                      /* X = {}  */
+YASM_LIB_DECL
+void    BitVector_Fill       (wordptr addr);                      /* X = ~{} */
+YASM_LIB_DECL
+void    BitVector_Flip       (wordptr addr);                      /* X = ~X  */
+
+YASM_LIB_DECL
+void    BitVector_Primes     (wordptr addr);
+
+/* ===> miscellaneous functions: */
+
+YASM_LIB_DECL
+void    BitVector_Reverse    (wordptr X, wordptr Y);
+
+/* ===> bit vector interval operations and functions: */
+
+YASM_LIB_DECL
+void    BitVector_Interval_Empty     (/*@out@*/ wordptr addr, N_int lower, N_int upper);
+YASM_LIB_DECL
+void    BitVector_Interval_Fill      (/*@out@*/ wordptr addr, N_int lower, N_int upper);
+YASM_LIB_DECL
+void    BitVector_Interval_Flip      (/*@out@*/ wordptr addr, N_int lower, N_int upper);
+YASM_LIB_DECL
+void    BitVector_Interval_Reverse   (/*@out@*/ wordptr addr, N_int lower, N_int upper);
+
+YASM_LIB_DECL
+boolean BitVector_interval_scan_inc  (wordptr addr, N_int start,
+                                      N_intptr min, N_intptr max);
+YASM_LIB_DECL
+boolean BitVector_interval_scan_dec  (wordptr addr, N_int start,
+                                      N_intptr min, N_intptr max);
+
+YASM_LIB_DECL
+void    BitVector_Interval_Copy      (/*@out@*/ wordptr X, wordptr Y, N_int Xoffset,
+                                      N_int Yoffset, N_int length);
+
+YASM_LIB_DECL
+wordptr BitVector_Interval_Substitute(/*@out@*/ wordptr X, wordptr Y,
+                                      N_int Xoffset, N_int Xlength,
+                                      N_int Yoffset, N_int Ylength);
+
+/* ===> bit vector test functions: */
+
+YASM_LIB_DECL
+boolean BitVector_is_empty   (wordptr addr);                  /* X == {} ?   */
+YASM_LIB_DECL
+boolean BitVector_is_full    (wordptr addr);                  /* X == ~{} ?  */
+
+YASM_LIB_DECL
+boolean BitVector_equal      (wordptr X, wordptr Y);          /* X == Y ?    */
+YASM_LIB_DECL
+Z_int   BitVector_Lexicompare(wordptr X, wordptr Y);          /* X <,=,> Y ? */
+YASM_LIB_DECL
+Z_int   BitVector_Compare    (wordptr X, wordptr Y);          /* X <,=,> Y ? */
+
+/* ===> bit vector string conversion functions: */
+
+YASM_LIB_DECL
+/*@only@*/ charptr BitVector_to_Hex     (wordptr addr);
+YASM_LIB_DECL
+ErrCode BitVector_from_Hex   (/*@out@*/wordptr addr, charptr string);
+
+YASM_LIB_DECL
+ErrCode BitVector_from_Oct(/*@out@*/ wordptr addr, charptr string);
+
+YASM_LIB_DECL
+/*@only@*/ charptr BitVector_to_Bin     (wordptr addr);
+YASM_LIB_DECL
+ErrCode BitVector_from_Bin   (/*@out@*/ wordptr addr, charptr string);
+
+YASM_LIB_DECL
+/*@only@*/ charptr BitVector_to_Dec     (wordptr addr);
+YASM_LIB_DECL
+ErrCode BitVector_from_Dec   (/*@out@*/ wordptr addr, charptr string);
+
+typedef struct BitVector_from_Dec_static_data BitVector_from_Dec_static_data;
+YASM_LIB_DECL
+BitVector_from_Dec_static_data *BitVector_from_Dec_static_Boot(N_word bits);
+YASM_LIB_DECL
+void BitVector_from_Dec_static_Shutdown(/*@null@*/ BitVector_from_Dec_static_data *data);
+YASM_LIB_DECL
+ErrCode BitVector_from_Dec_static(BitVector_from_Dec_static_data *data,
+                                  /*@out@*/ wordptr addr, charptr string);
+
+YASM_LIB_DECL
+/*@only@*/ charptr BitVector_to_Enum    (wordptr addr);
+YASM_LIB_DECL
+ErrCode BitVector_from_Enum  (/*@out@*/ wordptr addr, charptr string);
+
+/* ===> bit vector bit operations, functions & tests: */
+
+YASM_LIB_DECL
+void    BitVector_Bit_Off    (/*@out@*/ wordptr addr, N_int indx); /*  X = X \ {x}    */
+YASM_LIB_DECL
+void    BitVector_Bit_On     (/*@out@*/ wordptr addr, N_int indx); /*  X = X + {x}    */
+YASM_LIB_DECL
+boolean BitVector_bit_flip   (/*@out@*/ wordptr addr, N_int indx); /* (X+{x})\(X*{x}) */
+
+YASM_LIB_DECL
+boolean BitVector_bit_test   (wordptr addr, N_int indx); /*  {x} in X ?     */
+
+YASM_LIB_DECL
+void    BitVector_Bit_Copy   (/*@out@*/ wordptr addr, N_int indx, boolean bit);
+
+/* ===> bit vector bit shift & rotate functions: */
+
+YASM_LIB_DECL
+void    BitVector_LSB                (/*@out@*/ wordptr addr, boolean bit);
+YASM_LIB_DECL
+void    BitVector_MSB                (/*@out@*/ wordptr addr, boolean bit);
+YASM_LIB_DECL
+boolean BitVector_lsb_               (wordptr addr);
+YASM_LIB_DECL
+boolean BitVector_msb_               (wordptr addr);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_rotate_left        (wordptr addr);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_rotate_right       (wordptr addr);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_shift_left         (wordptr addr, boolean carry_in);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_shift_right        (wordptr addr, boolean carry_in);
+YASM_LIB_DECL
+void    BitVector_Move_Left          (wordptr addr, N_int bits);
+YASM_LIB_DECL
+void    BitVector_Move_Right         (wordptr addr, N_int bits);
+
+/* ===> bit vector insert/delete bits: */
+
+YASM_LIB_DECL
+void    BitVector_Insert     (wordptr addr, N_int offset, N_int count,
+                              boolean clear);
+YASM_LIB_DECL
+void    BitVector_Delete     (wordptr addr, N_int offset, N_int count,
+                              boolean clear);
+
+/* ===> bit vector arithmetic: */
+
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_increment  (wordptr addr);                        /*  X++  */
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_decrement  (wordptr addr);                        /*  X--  */
+
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_compute    (wordptr X, wordptr Y, wordptr Z, boolean minus,
+                                                               boolean *carry);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_add        (wordptr X, wordptr Y, wordptr Z, boolean *carry);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_sub        (wordptr X, wordptr Y, wordptr Z, boolean *carry);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_inc        (wordptr X, wordptr Y);
+YASM_LIB_DECL
+boolean /*@alt void@*/ BitVector_dec        (wordptr X, wordptr Y);
+
+YASM_LIB_DECL
+void    BitVector_Negate     (wordptr X, wordptr Y);
+YASM_LIB_DECL
+void    BitVector_Absolute   (wordptr X, wordptr Y);
+YASM_LIB_DECL
+Z_int   BitVector_Sign       (wordptr addr);
+YASM_LIB_DECL
+ErrCode BitVector_Mul_Pos    (wordptr X, wordptr Y, wordptr Z, boolean strict);
+YASM_LIB_DECL
+ErrCode BitVector_Multiply   (wordptr X, wordptr Y, wordptr Z);
+YASM_LIB_DECL
+ErrCode BitVector_Div_Pos    (wordptr Q, wordptr X, wordptr Y, wordptr R);
+YASM_LIB_DECL
+ErrCode BitVector_Divide     (wordptr Q, wordptr X, wordptr Y, wordptr R);
+YASM_LIB_DECL
+ErrCode BitVector_GCD        (wordptr X, wordptr Y, wordptr Z);
+YASM_LIB_DECL
+ErrCode BitVector_GCD2       (wordptr U, wordptr V, wordptr W,      /*   O   */
+                                         wordptr X, wordptr Y);     /*   I   */
+YASM_LIB_DECL
+ErrCode BitVector_Power      (wordptr X, wordptr Y, wordptr Z);
+
+/* ===> direct memory access functions: */
+
+YASM_LIB_DECL
+void    BitVector_Block_Store(wordptr addr, charptr buffer, N_int length);
+YASM_LIB_DECL
+charptr BitVector_Block_Read (wordptr addr, /*@out@*/ N_intptr length);
+
+/* ===> word array functions: */
+
+YASM_LIB_DECL
+void    BitVector_Word_Store (wordptr addr, N_int offset, N_int value);
+YASM_LIB_DECL
+N_int   BitVector_Word_Read  (wordptr addr, N_int offset);
+
+YASM_LIB_DECL
+void    BitVector_Word_Insert(wordptr addr, N_int offset, N_int count,
+                              boolean clear);
+YASM_LIB_DECL
+void    BitVector_Word_Delete(wordptr addr, N_int offset, N_int count,
+                              boolean clear);
+
+/* ===> arbitrary size chunk functions: */
+
+YASM_LIB_DECL
+void    BitVector_Chunk_Store(wordptr addr, N_int chunksize,
+                              N_int offset, N_long value);
+YASM_LIB_DECL
+N_long  BitVector_Chunk_Read (wordptr addr, N_int chunksize,
+                              N_int offset);
+
+/* ===> set operations: */
+
+YASM_LIB_DECL
+void    Set_Union            (wordptr X, wordptr Y, wordptr Z); /* X = Y + Z */
+YASM_LIB_DECL
+void    Set_Intersection     (wordptr X, wordptr Y, wordptr Z); /* X = Y * Z */
+YASM_LIB_DECL
+void    Set_Difference       (wordptr X, wordptr Y, wordptr Z); /* X = Y \ Z */
+YASM_LIB_DECL
+void    Set_ExclusiveOr      (wordptr X, wordptr Y, wordptr Z); /*(Y+Z)\(Y*Z)*/
+YASM_LIB_DECL
+void    Set_Complement       (wordptr X, wordptr Y);            /* X = ~Y    */
+
+/* ===> set functions: */
+
+YASM_LIB_DECL
+boolean Set_subset           (wordptr X, wordptr Y);            /* X in Y ?  */
+
+YASM_LIB_DECL
+N_int   Set_Norm             (wordptr addr);                    /* = | X |   */
+YASM_LIB_DECL
+N_int   Set_Norm2            (wordptr addr);                    /* = | X |   */
+YASM_LIB_DECL
+N_int   Set_Norm3            (wordptr addr);                    /* = | X |   */
+YASM_LIB_DECL
+Z_long  Set_Min              (wordptr addr);                    /* = min(X)  */
+YASM_LIB_DECL
+Z_long  Set_Max              (wordptr addr);                    /* = max(X)  */
+
+/* ===> matrix-of-booleans operations: */
+
+YASM_LIB_DECL
+void    Matrix_Multiplication(wordptr X, N_int rowsX, N_int colsX,
+                              wordptr Y, N_int rowsY, N_int colsY,
+                              wordptr Z, N_int rowsZ, N_int colsZ);
+
+YASM_LIB_DECL
+void    Matrix_Product       (wordptr X, N_int rowsX, N_int colsX,
+                              wordptr Y, N_int rowsY, N_int colsY,
+                              wordptr Z, N_int rowsZ, N_int colsZ);
+
+YASM_LIB_DECL
+void    Matrix_Closure       (wordptr addr, N_int rows, N_int cols);
+
+YASM_LIB_DECL
+void    Matrix_Transpose     (wordptr X, N_int rowsX, N_int colsX,
+                              wordptr Y, N_int rowsY, N_int colsY);
+
+/*****************************************************************************/
+/*  VERSION:  6.4                                                            */
+/*****************************************************************************/
+/*  VERSION HISTORY:                                                         */
+/*****************************************************************************/
+/*                                                                           */
+/*    Version 6.4  03.10.04  Added C++ comp. directives. Improved "Norm()".  */
+/*    Version 6.3  28.09.02  Added "Create_List()" and "GCD2()".             */
+/*    Version 6.2  15.09.02  Overhauled error handling. Fixed "GCD()".       */
+/*    Version 6.1  08.10.01  Make VMS linker happy: _lsb,_msb => _lsb_,_msb_ */
+/*    Version 6.0  08.10.00  Corrected overflow handling.                    */
+/*    Version 5.8  14.07.00  Added "Power()". Changed "Copy()".              */
+/*    Version 5.7  19.05.99  Quickened "Div_Pos()". Added "Product()".       */
+/*    Version 5.6  02.11.98  Leading zeros eliminated in "to_Hex()".         */
+/*    Version 5.5  21.09.98  Fixed bug of uninitialized "error" in Multiply. */
+/*    Version 5.4  07.09.98  Fixed bug of uninitialized "error" in Divide.   */
+/*    Version 5.3  12.05.98  Improved Norm. Completed history.               */
+/*    Version 5.2  31.03.98  Improved Norm.                                  */
+/*    Version 5.1  09.03.98  No changes.                                     */
+/*    Version 5.0  01.03.98  Major additions and rewrite.                    */
+/*    Version 4.2  16.07.97  Added is_empty, is_full.                        */
+/*    Version 4.1  30.06.97  Added word-ins/del, move-left/right, inc/dec.   */
+/*    Version 4.0  23.04.97  Rewrite. Added bit shift and bool. matrix ops.  */
+/*    Version 3.2  04.02.97  Added interval methods.                         */
+/*    Version 3.1  21.01.97  Fixed bug on 64 bit machines.                   */
+/*    Version 3.0  12.01.97  Added flip.                                     */
+/*    Version 2.0  14.12.96  Efficiency and consistency improvements.        */
+/*    Version 1.1  08.01.96  Added Resize and ExclusiveOr.                   */
+/*    Version 1.0  14.12.95  First version under UNIX (with Perl module).    */
+/*    Version 0.9  01.11.93  First version of C library under MS-DOS.        */
+/*    Version 0.1  ??.??.89  First version in Turbo Pascal under CP/M.       */
+/*                                                                           */
+/*****************************************************************************/
+/*  AUTHOR:                                                                  */
+/*****************************************************************************/
+/*                                                                           */
+/*    Steffen Beyer                                                          */
+/*    mailto:sb@engelschall.com                                              */
+/*    http://www.engelschall.com/u/sb/download/                              */
+/*                                                                           */
+/*****************************************************************************/
+/*  COPYRIGHT:                                                               */
+/*****************************************************************************/
+/*                                                                           */
+/*    Copyright (c) 1995 - 2004 by Steffen Beyer.                            */
+/*    All rights reserved.                                                   */
+/*                                                                           */
+/*****************************************************************************/
+/*  LICENSE:                                                                 */
+/*****************************************************************************/
+/* This package is free software; you can use, modify and redistribute       */
+/* it under the same terms as Perl itself, i.e., under the terms of          */
+/* the "Artistic License" or the "GNU General Public License".               */
+/*                                                                           */
+/* The C library at the core of this Perl module can additionally            */
+/* be used, modified and redistributed under the terms of the                */
+/* "GNU Library General Public License".                                     */
+/*                                                                           */
+/*****************************************************************************/
+/*  ARTISTIC LICENSE:                                                        */
+/*****************************************************************************/
+/*
+                         The "Artistic License"
+
+                                Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
+
+Definitions:
+
+        "Package" refers to the collection of files distributed by the
+        Copyright Holder, and derivatives of that collection of files
+        created through textual modification.
+
+        "Standard Version" refers to such a Package if it has not been
+        modified, or has been modified in accordance with the wishes
+        of the Copyright Holder as specified below.
+
+        "Copyright Holder" is whoever is named in the copyright or
+        copyrights for the package.
+
+        "You" is you, if you're thinking about copying or distributing
+        this Package.
+
+        "Reasonable copying fee" is whatever you can justify on the
+        basis of media cost, duplication charges, time of people involved,
+        and so on.  (You will not be required to justify it to the
+        Copyright Holder, but only to the computing community at large
+        as a market that must bear the fee.)
+
+        "Freely Available" means that no fee is charged for the item
+        itself, though there may be fees involved in handling the item.
+        It also means that recipients of the item may redistribute it
+        under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder.  A Package
+modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
+
+    a) place your modifications in the Public Domain or otherwise make them
+    Freely Available, such as by posting said modifications to Usenet or
+    an equivalent medium, or placing the modifications on a major archive
+    site such as uunet.uu.net, or by allowing the Copyright Holder to include
+    your modifications in the Standard Version of the Package.
+
+    b) use the modified Package only within your corporation or organization.
+
+    c) rename any non-standard executables so the names do not conflict
+    with standard executables, which must also be provided, and provide
+    a separate manual page for each non-standard executable that clearly
+    documents how it differs from the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+    a) distribute a Standard Version of the executables and library files,
+    together with instructions (in the manual page or equivalent) on where
+    to get the Standard Version.
+
+    b) accompany the distribution with the machine-readable source of
+    the Package with your modifications.
+
+    c) give non-standard executables non-standard names, and clearly
+    document the differences in manual pages (or equivalent), together
+    with instructions on where to get the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this
+Package.  You may not charge a fee for this Package itself.  However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own.  You may embed this Package's interpreter within
+an executable of yours (by linking); this shall be construed as a mere
+form of aggregation, provided that the complete Standard Version of the
+interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whoever generated
+them, and may be sold commercially, and may be aggregated with this
+Package.  If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. C subroutines (or comparably compiled subroutines in other
+languages) supplied by you and linked into this Package in order to
+emulate subroutines and variables of the language defined by this
+Package shall not be considered part of this Package, but are the
+equivalent of input as in Paragraph 6, provided these subroutines do
+not change the language in any way that would cause it to fail the
+regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always
+permitted provided that the use of this Package is embedded; that is,
+when no overt attempt is made to make this Package's interfaces visible
+to the end user of the commercial distribution.  Such use shall not be
+construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+                                The End
+*/
+/*****************************************************************************/
+/*  GNU GENERAL PUBLIC LICENSE:                                              */
+/*****************************************************************************/
+/* This program is free software; you can redistribute it and/or             */
+/* modify it under the terms of the GNU General Public License               */
+/* as published by the Free Software Foundation; either version 2            */
+/* of the License, or (at your option) any later version.                    */
+/*                                                                           */
+/* This program is distributed in the hope that it will be useful,           */
+/* but WITHOUT ANY WARRANTY; without even the implied warranty of            */
+/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             */
+/* GNU General Public License for more details.                              */
+/*                                                                           */
+/* You should have received a copy of the GNU General Public License         */
+/* along with this program; if not, write to the                             */
+/* Free Software Foundation, Inc.,                                           */
+/* 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                 */
+/*                                                                           */
+/*****************************************************************************/
+/*  GNU LIBRARY GENERAL PUBLIC LICENSE:                                      */
+/*****************************************************************************/
+/*                                                                           */
+/*    This library is free software; you can redistribute it and/or          */
+/*    modify it under the terms of the GNU Library General Public            */
+/*    License as published by the Free Software Foundation; either           */
+/*    version 2 of the License, or (at your option) any later version.       */
+/*                                                                           */
+/*    This library is distributed in the hope that it will be useful,        */
+/*    but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU       */
+/*    Library General Public License for more details.                       */
+/*                                                                           */
+/*    You should have received a copy of the GNU Library General Public      */
+/*    License along with this library; if not, write to the                  */
+/*    Free Software Foundation, Inc.,                                        */
+/*    59 Temple Place, Suite 330, Boston, MA 02111-1307 USA                  */
+/*                                                                           */
+/*    or download a copy from ftp://ftp.gnu.org/pub/gnu/COPYING.LIB-2.0      */
+/*                                                                           */
+/*****************************************************************************/
+#endif
</ins></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcewebrtcmodulesvideo_codingcodecsvp8vp8_noopcc"></a>
<div class="delfile"><h4>Deleted: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc      2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc 2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,39 +0,0 @@
</span><del>-/*
- *  Copyright (c) 2017 Apple Inc. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- *
- */
-
-#if !defined(RTC_DISABLE_VP8)
-#error
-#endif  // !defined(RTC_DISABLE_VP8)
-
-#include "rtc_base/checks.h"
-#include "modules/video_coding/codecs/vp8/include/vp8.h"
-
-namespace webrtc {
-
-bool VP8Encoder::IsSupported() {
-  return false;
-}
-
-std::unique_ptr<VP8Encoder> VP8Encoder::Create() {
-  RTC_NOTREACHED();
-  return nullptr;
-}
-
-bool VP8Decoder::IsSupported() {
-  return false;
-}
-
-std::unique_ptr<VP8Decoder> VP8Decoder::Create() {
-  RTC_NOTREACHED();
-  return nullptr;
-}
-
-}  // namespace webrtc
</del></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcewebrtcsdkWebKitWebKitUtilitiesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h     2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h        2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -38,9 +38,11 @@
</span><span class="cx"> class VideoEncoderFactory;
</span><span class="cx"> class VideoFrame;
</span><span class="cx"> 
</span><del>-std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory();
-std::unique_ptr<webrtc::VideoDecoderFactory> createWebKitDecoderFactory();
</del><ins>+enum class WebKitCodecSupport { H264, H264AndVP8 };
</ins><span class="cx"> 
</span><ins>+std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory(WebKitCodecSupport);
+std::unique_ptr<webrtc::VideoDecoderFactory> createWebKitDecoderFactory(WebKitCodecSupport);
+
</ins><span class="cx"> void setApplicationStatus(bool isActive);
</span><span class="cx"> 
</span><span class="cx"> void setH264HardwareEncoderAllowed(bool);
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcewebrtcsdkWebKitWebKitUtilitiesmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm    2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm       2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include "api/video/video_frame.h"
</span><span class="cx"> #include "third_party/libyuv/include/libyuv/convert_from.h"
</span><span class="cx"> #include "webrtc/sdk/objc/Framework/Native/src/objc_frame_buffer.h"
</span><ins>+#include "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h"
</ins><span class="cx"> #include "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h"
</span><span class="cx"> #include "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h"
</span><span class="cx"> #include "webrtc/sdk/objc/Framework/Native/api/video_decoder_factory.h"
</span><span class="lines">@@ -95,7 +96,7 @@
</span><span class="cx">         [[RTCUIApplicationStatusObserver sharedInstance] setInactive];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory()
</del><ins>+std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory(WebKitCodecSupport codecSupport)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE_VCP_ENCODER
</span><span class="cx">     static std::once_flag onceFlag;
</span><span class="lines">@@ -103,12 +104,12 @@
</span><span class="cx">         webrtc::VPModuleInitialize();
</span><span class="cx">     });
</span><span class="cx"> #endif
</span><del>-    return ObjCToNativeVideoEncoderFactory([[RTCVideoEncoderFactoryH264 alloc] init]);
</del><ins>+    return ObjCToNativeVideoEncoderFactory(codecSupport == WebKitCodecSupport::H264AndVP8 ? [[RTCDefaultVideoEncoderFactory alloc] init] : [[RTCVideoEncoderFactoryH264 alloc] init]);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-std::unique_ptr<webrtc::VideoDecoderFactory> createWebKitDecoderFactory()
</del><ins>+std::unique_ptr<webrtc::VideoDecoderFactory> createWebKitDecoderFactory(WebKitCodecSupport codecSupport)
</ins><span class="cx"> {
</span><del>-    return ObjCToNativeVideoDecoderFactory([[RTCVideoDecoderFactoryH264 alloc] init]);
</del><ins>+    return ObjCToNativeVideoDecoderFactory(codecSupport == WebKitCodecSupport::H264AndVP8 ? [[RTCDefaultVideoDecoderFactory alloc] init] : [[RTCVideoDecoderFactoryH264 alloc] init]);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static bool h264HardwareEncoderAllowed = true;
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcewebrtcsdkobjcFrameworkClassesPeerConnectionRTCDefaultVideoDecoderFactorymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.mm (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.mm       2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.mm  2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -21,10 +21,8 @@
</span><span class="cx"> - (id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info {
</span><span class="cx">   if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
</span><span class="cx">     return [[RTCVideoDecoderH264 alloc] init];
</span><del>-#if !defined(RTC_DISABLE_VP8)
</del><span class="cx">   } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
</span><span class="cx">     return [RTCVideoDecoderVP8 vp8Decoder];
</span><del>-#endif
</del><span class="cx"> #if !defined(RTC_DISABLE_VP9)
</span><span class="cx">   } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
</span><span class="cx">     return [RTCVideoDecoderVP9 vp9Decoder];
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtcSourcewebrtcsdkobjcFrameworkClassesPeerConnectionRTCDefaultVideoEncoderFactorymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.mm (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.mm       2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.mm  2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -40,9 +40,7 @@
</span><span class="cx">       [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name
</span><span class="cx">                                    parameters:constrainedBaselineParams];
</span><span class="cx"> 
</span><del>-#if !defined(RTC_DISABLE_VP8)
</del><span class="cx">   RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name];
</span><del>-#endif
</del><span class="cx"> 
</span><span class="cx"> #if !defined(RTC_DISABLE_VP9)
</span><span class="cx">   RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name];
</span><span class="lines">@@ -51,9 +49,7 @@
</span><span class="cx">   return @[
</span><span class="cx">     constrainedHighInfo,
</span><span class="cx">     constrainedBaselineInfo,
</span><del>-#if !defined(RTC_DISABLE_VP8)
</del><span class="cx">     vp8Info,
</span><del>-#endif
</del><span class="cx"> #if !defined(RTC_DISABLE_VP9)
</span><span class="cx">     vp9Info,
</span><span class="cx"> #endif
</span><span class="lines">@@ -63,10 +59,8 @@
</span><span class="cx"> - (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
</span><span class="cx">   if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
</span><span class="cx">     return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
</span><del>-#if !defined(RTC_DISABLE_VP8)
</del><span class="cx">   } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
</span><span class="cx">     return [RTCVideoEncoderVP8 vp8Encoder];
</span><del>-#endif
</del><span class="cx"> #if !defined(RTC_DISABLE_VP9)
</span><span class="cx">   } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) {
</span><span class="cx">     return [RTCVideoEncoderVP9 vp9Encoder];
</span></span></pre></div>
<a id="trunkSourceThirdPartylibwebrtclibwebrtcxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj    2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj       2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -79,7 +79,11 @@
</span><span class="cx">          4124554B1EF8874300F11809 /* video_frame_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4124554A1EF8874300F11809 /* video_frame_buffer.cc */; };
</span><span class="cx">          412455561EF887FB00F11809 /* packetlossestimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 412455541EF887FA00F11809 /* packetlossestimator.cc */; };
</span><span class="cx">          412455571EF887FB00F11809 /* packetlossestimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 412455551EF887FA00F11809 /* packetlossestimator.h */; };
</span><ins>+               4129408A212E0CC400AD95E7 /* vpx_config.c in Sources */ = {isa = PBXBuildFile; fileRef = 4105EB99212E02CB008C0C20 /* vpx_config.c */; };
+               4129408D212E0D1800AD95E7 /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4105EB83212E01D2008C0C20 /* libvpx.a */; };
+               41294092212E128D00AD95E7 /* libvpx_vp8_encoder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4129408E212E128B00AD95E7 /* libvpx_vp8_encoder.cc */; };
</ins><span class="cx">           41294093212E128D00AD95E7 /* libvpx_vp8_encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4129408F212E128C00AD95E7 /* libvpx_vp8_encoder.h */; };
</span><ins>+               41294094212E128D00AD95E7 /* libvpx_vp8_decoder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41294090212E128C00AD95E7 /* libvpx_vp8_decoder.cc */; };
</ins><span class="cx">           41294095212E128D00AD95E7 /* libvpx_vp8_decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 41294091212E128C00AD95E7 /* libvpx_vp8_decoder.h */; };
</span><span class="cx">          41299B8B2127365100B3414B /* pacer_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CD62127363C00C27CD6 /* pacer_controller.cc */; };
</span><span class="cx">          41299B8C2127365100B3414B /* send_time_history.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CD82127363D00C27CD6 /* send_time_history.cc */; };
</span><span class="lines">@@ -107,6 +111,32 @@
</span><span class="cx">          4130921A1EF8D63F00757C55 /* rtp_transport_controller_send_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 413092171EF8D63900757C55 /* rtp_transport_controller_send_interface.h */; };
</span><span class="cx">          4130921B1EF8D63F00757C55 /* rtp_transport_controller_send.cc in Sources */ = {isa = PBXBuildFile; fileRef = 413092181EF8D63F00757C55 /* rtp_transport_controller_send.cc */; };
</span><span class="cx">          413092301EF8D77100757C55 /* aec_dump_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4130922D1EF8D77100757C55 /* aec_dump_factory.h */; };
</span><ins>+               41330A13212E2BDF00280939 /* add_noise.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309E9212E2BD400280939 /* add_noise.c */; };
+               41330A14212E2BDF00280939 /* avg.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309E5212E2BD400280939 /* avg.c */; };
+               41330A15212E2BDF00280939 /* bitreader.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309E6212E2BD400280939 /* bitreader.c */; };
+               41330A16212E2BDF00280939 /* bitwriter.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F1212E2BD600280939 /* bitwriter.c */; };
+               41330A17212E2BDF00280939 /* deblock.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F2212E2BD600280939 /* deblock.c */; };
+               41330A18212E2BDF00280939 /* fastssim.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F9212E2BD800280939 /* fastssim.c */; };
+               41330A19212E2BDF00280939 /* fwd_txfm.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309EB212E2BD500280939 /* fwd_txfm.c */; };
+               41330A1A212E2BDF00280939 /* intrapred.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309EC212E2BD500280939 /* intrapred.c */; };
+               41330A1B212E2BDF00280939 /* inv_txfm.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F6212E2BD700280939 /* inv_txfm.c */; };
+               41330A1C212E2BDF00280939 /* loopfilter.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309EE212E2BD600280939 /* loopfilter.c */; };
+               41330A1D212E2BDF00280939 /* prob.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309EF212E2BD600280939 /* prob.c */; };
+               41330A1E212E2BDF00280939 /* psnrhvs.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309EA212E2BD500280939 /* psnrhvs.c */; };
+               41330A1F212E2BDF00280939 /* quantize.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309E7212E2BD400280939 /* quantize.c */; };
+               41330A21212E2BDF00280939 /* skin_detection.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F7212E2BD800280939 /* skin_detection.c */; };
+               41330A23212E2BDF00280939 /* subtract.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309ED212E2BD500280939 /* subtract.c */; };
+               41330A24212E2BDF00280939 /* sum_squares.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F3212E2BD700280939 /* sum_squares.c */; };
+               41330A26212E2BDF00280939 /* vpx_convolve.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F5212E2BD700280939 /* vpx_convolve.c */; };
+               41330A27212E2BDF00280939 /* vpx_dsp_rtcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F8212E2BD800280939 /* vpx_dsp_rtcd.c */; };
+               41330A28212E2BDF00280939 /* bitreader_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1CB212E2B69009F73EC /* bitreader_buffer.c */; };
+               41330A29212E2BDF00280939 /* bitwriter_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1CD212E2B6A009F73EC /* bitwriter_buffer.c */; };
+               41330A2A212E2BDF00280939 /* fwd_txfm.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EAF1CC212E2B69009F73EC /* fwd_txfm.h */; };
+               41330A2B212E2BDF00280939 /* psnr.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1CA212E2B69009F73EC /* psnr.c */; };
+               41330A30212E2BF500280939 /* vpx_mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 41330A2D212E2BEE00280939 /* vpx_mem.c */; };
+               41330A31212E2BF500280939 /* vpx_mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 41330A2C212E2BED00280939 /* vpx_mem.h */; };
+               41330A34212E2C1F00280939 /* vpx_scale_rtcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 41330A32212E2C1E00280939 /* vpx_scale_rtcd.c */; };
+               41330A35212E2C1F00280939 /* vpx_scale.h in Headers */ = {isa = PBXBuildFile; fileRef = 41330A33212E2C1E00280939 /* vpx_scale.h */; };
</ins><span class="cx">           413A213D1FE0F0EF00373E99 /* srtp_priv.h in Headers */ = {isa = PBXBuildFile; fileRef = 413A21381FE0F0EE00373E99 /* srtp_priv.h */; };
</span><span class="cx">          413A213E1FE0F0EF00373E99 /* ekt.h in Headers */ = {isa = PBXBuildFile; fileRef = 413A21391FE0F0EF00373E99 /* ekt.h */; };
</span><span class="cx">          413A213F1FE0F0EF00373E99 /* srtp.h in Headers */ = {isa = PBXBuildFile; fileRef = 413A213A1FE0F0EF00373E99 /* srtp.h */; };
</span><span class="lines">@@ -444,12 +474,6 @@
</span><span class="cx">          41433D281F79B33400387B4D /* lpc_tables.h in Headers */ = {isa = PBXBuildFile; fileRef = 41433CE71F79B33300387B4D /* lpc_tables.h */; };
</span><span class="cx">          41433D291F79B33400387B4D /* arith_routines_hist.c in Sources */ = {isa = PBXBuildFile; fileRef = 41433CE81F79B33300387B4D /* arith_routines_hist.c */; };
</span><span class="cx">          41433D2A1F79B33400387B4D /* isacfix.c in Sources */ = {isa = PBXBuildFile; fileRef = 41433CE91F79B33300387B4D /* isacfix.c */; };
</span><del>-               4145020B2152E01C0033B4D3 /* onyxd.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502052152E01A0033B4D3 /* onyxd.h */; };
-               4145020C2152E01C0033B4D3 /* vp8_skin_detection.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502062152E01B0033B4D3 /* vp8_skin_detection.h */; };
-               4145020D2152E01C0033B4D3 /* blockd.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502072152E01B0033B4D3 /* blockd.h */; };
-               4145020E2152E01C0033B4D3 /* threading.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502082152E01B0033B4D3 /* threading.h */; };
-               4145020F2152E01C0033B4D3 /* default_coef_probs.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502092152E01B0033B4D3 /* default_coef_probs.h */; };
-               414502102152E01C0033B4D3 /* vp8_entropymodedata.h in Headers */ = {isa = PBXBuildFile; fileRef = 4145020A2152E01B0033B4D3 /* vp8_entropymodedata.h */; };
</del><span class="cx">           4145E48D1EF88B9D00FCF6E6 /* video_decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4145E48B1EF88B9600FCF6E6 /* video_decoder.h */; };
</span><span class="cx">          4145E48E1EF88B9D00FCF6E6 /* video_encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4145E48C1EF88B9D00FCF6E6 /* video_encoder.h */; };
</span><span class="cx">          4145E4911EF88EF700FCF6E6 /* webrtc_libyuv.h in Headers */ = {isa = PBXBuildFile; fileRef = 4145E4901EF88EF500FCF6E6 /* webrtc_libyuv.h */; };
</span><span class="lines">@@ -513,6 +537,55 @@
</span><span class="cx">          415F1FCD212730F000064CBF /* audio_mixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FC9212730F000064CBF /* audio_mixer.h */; };
</span><span class="cx">          415F1FCE212730F000064CBF /* audio_frame.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FCA212730F000064CBF /* audio_frame.cc */; };
</span><span class="cx">          415F1FCF212730F000064CBF /* audio_frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FCB212730F000064CBF /* audio_frame.h */; };
</span><ins>+               4162BA37216596160044F344 /* vp8_cx_iface.c in Sources */ = {isa = PBXBuildFile; fileRef = 411ED031212E04CC004320BA /* vp8_cx_iface.c */; };
+               4162BA38216596160044F344 /* vp8_dx_iface.c in Sources */ = {isa = PBXBuildFile; fileRef = 411ED032212E04CC004320BA /* vp8_dx_iface.c */; };
+               41659C082165975700CCBDC2 /* filter_x86.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239AE6214756C700396F81 /* filter_x86.c */; };
+               41659C092165975700CCBDC2 /* filter_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = 41239AE9214756C700396F81 /* filter_x86.h */; };
+               41659C0A2165975700CCBDC2 /* idct_blk_mmx.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239AE7214756C700396F81 /* idct_blk_mmx.c */; };
+               41659C0B2165975700CCBDC2 /* idct_blk_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239AEB214756C800396F81 /* idct_blk_sse2.c */; };
+               41659C0C2165975700CCBDC2 /* loopfilter_x86.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239AEA214756C800396F81 /* loopfilter_x86.c */; };
+               41659C0D2165975700CCBDC2 /* vp8_asm_stubs.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239AE8214756C700396F81 /* vp8_asm_stubs.c */; };
+               41659C0E2165977500CCBDC2 /* systemdependent.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239B3A21476AE500396F81 /* systemdependent.c */; };
+               41659C10216597A100CCBDC2 /* vp8_enc_stubs_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731DD212E045E001280EB /* vp8_enc_stubs_sse2.c */; };
+               41659C11216597A100CCBDC2 /* vp8_quantize_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731DB212E045D001280EB /* vp8_quantize_sse2.c */; };
+               41659C12216597A100CCBDC2 /* vp8_quantize_ssse3.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731DF212E045E001280EB /* vp8_quantize_ssse3.c */; };
+               41659C14216597B700CCBDC2 /* variance.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F4212E2BD700280939 /* variance.c */; };
+               416731B3212E0430001280EB /* boolhuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731A6212E0425001280EB /* boolhuff.c */; };
+               416731B4212E0430001280EB /* denoising.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731AF212E0428001280EB /* denoising.c */; };
+               416731B5212E0430001280EB /* ethreading.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731B0212E0428001280EB /* ethreading.c */; };
+               416731B6212E0430001280EB /* lookahead.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731AC212E0427001280EB /* lookahead.c */; };
+               416731B7212E0430001280EB /* mcomp.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731AE212E0428001280EB /* mcomp.c */; };
+               416731B8212E0430001280EB /* modecosts.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731AB212E0427001280EB /* modecosts.c */; };
+               416731B9212E0430001280EB /* mr_dissim.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731AA212E0426001280EB /* mr_dissim.c */; };
+               416731BB212E0430001280EB /* picklpf.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731AD212E0427001280EB /* picklpf.c */; };
+               416731BC212E0430001280EB /* ratectrl.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731A7212E0425001280EB /* ratectrl.c */; };
+               416731BD212E0430001280EB /* rdopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731A5212E0425001280EB /* rdopt.c */; };
+               416731BE212E0430001280EB /* segmentation.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731A9212E0426001280EB /* segmentation.c */; };
+               416731BF212E0430001280EB /* tokenize.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731B1212E0429001280EB /* tokenize.c */; };
+               416731C0212E0430001280EB /* treewriter.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731B2212E0429001280EB /* treewriter.c */; };
+               416731C1212E0430001280EB /* block.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDA0212E03EC00E54E93 /* block.h */; };
+               416731C2212E0430001280EB /* dct_value_tokens.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDAA212E03F000E54E93 /* dct_value_tokens.h */; };
+               416731C3212E0430001280EB /* dct.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EEFDA5212E03EE00E54E93 /* dct.c */; };
+               416731C4212E0430001280EB /* defaultcoefcounts.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDAC212E03F000E54E93 /* defaultcoefcounts.h */; };
+               416731C5212E0430001280EB /* encodeframe.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EEFDA8212E03EF00E54E93 /* encodeframe.c */; };
+               416731C6212E0430001280EB /* encodeframe.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDA3212E03EE00E54E93 /* encodeframe.h */; };
+               416731C7212E0430001280EB /* encodeintra.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EEFDA6212E03EF00E54E93 /* encodeintra.c */; };
+               416731C8212E0430001280EB /* encodeintra.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDA9212E03F000E54E93 /* encodeintra.h */; };
+               416731C9212E0430001280EB /* encodemb.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EEFDA1212E03ED00E54E93 /* encodemb.c */; };
+               416731CA212E0430001280EB /* encodemv.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EEFD9E212E03EB00E54E93 /* encodemv.c */; };
+               416731CB212E0430001280EB /* encodemv.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDAD212E03F100E54E93 /* encodemv.h */; };
+               416731CC212E0430001280EB /* firstpass.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDA4212E03EE00E54E93 /* firstpass.h */; };
+               416731CD212E0430001280EB /* onyx_int.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDA7212E03EF00E54E93 /* onyx_int.h */; };
+               416731CE212E0430001280EB /* picklpf.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFD9F212E03EB00E54E93 /* picklpf.h */; };
+               416731CF212E0430001280EB /* temporal_filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EEFDAB212E03F000E54E93 /* temporal_filter.c */; };
+               416731D0212E0430001280EB /* tokenize.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EEFDA2212E03ED00E54E93 /* tokenize.h */; };
+               416731D1212E0430001280EB /* bitstream.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CBAFA7212E03AD00DE1E1D /* bitstream.c */; };
+               416731D2212E0430001280EB /* bitstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CBAFA6212E03AD00DE1E1D /* bitstream.h */; };
+               416731D3212E0430001280EB /* denoising.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CBAFA4212E03AC00DE1E1D /* denoising.h */; };
+               416731D4212E0430001280EB /* firstpass.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CBAFA9212E03AD00DE1E1D /* firstpass.c */; };
+               416731D5212E0430001280EB /* mcomp.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CBAFA5212E03AC00DE1E1D /* mcomp.h */; };
+               416731D6212E0430001280EB /* pickinter.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CBAFAA212E03AD00DE1E1D /* pickinter.c */; };
+               416731D7212E0430001280EB /* vp8_quantize.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CBAFA8212E03AD00DE1E1D /* vp8_quantize.c */; };
</ins><span class="cx">           416D3BDB212731C200775F09 /* adaptive_agc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B46E212731A4008F9353 /* adaptive_agc.cc */; };
</span><span class="cx">          416D3BDC212731C200775F09 /* adaptive_agc.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B464212731A2008F9353 /* adaptive_agc.h */; };
</span><span class="cx">          416D3BDD212731C200775F09 /* adaptive_mode_level_estimator_agc.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B462212731A1008F9353 /* adaptive_mode_level_estimator_agc.h */; };
</span><span class="lines">@@ -532,8 +605,38 @@
</span><span class="cx">          416D3BEB212731C200775F09 /* signal_classifier.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B46F212731A4008F9353 /* signal_classifier.cc */; };
</span><span class="cx">          416D3BEC212731C200775F09 /* vad_with_level.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B46C212731A4008F9353 /* vad_with_level.cc */; };
</span><span class="cx">          416D3BED212731C200775F09 /* vector_float_frame.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B466212731A2008F9353 /* vector_float_frame.cc */; };
</span><ins>+               4175EA0B216596DD00B46390 /* gen_scalers.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239B0B214757AE00396F81 /* gen_scalers.c */; };
+               4175EA0C216596DD00B46390 /* vpx_scale.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239B08214757AD00396F81 /* vpx_scale.c */; };
+               4175EA0D216596DD00B46390 /* yv12config.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239B09214757AD00396F81 /* yv12config.c */; };
+               4175EA0E216596DD00B46390 /* yv12extend.c in Sources */ = {isa = PBXBuildFile; fileRef = 41239B0A214757AE00396F81 /* yv12extend.c */; };
</ins><span class="cx">           417DA4581EF9CD0D00E869DB /* RTCUIApplicationStatusObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 417DA4561EF9CD0A00E869DB /* RTCUIApplicationStatusObserver.h */; };
</span><span class="cx">          417F7AC72134A08000FBA7EC /* never_destroyed.h in Headers */ = {isa = PBXBuildFile; fileRef = 417F7AC62134A07F00FBA7EC /* never_destroyed.h */; };
</span><ins>+               418B14DE2165951E0046E03F /* RTCVideoCodecVP8.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1B4212E29C1009F73EC /* RTCVideoCodecVP8.mm */; };
+               418B14DF2165959F0046E03F /* svc_encodeframe.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1BD212E2AAD009F73EC /* svc_encodeframe.c */; };
+               418B14E02165959F0046E03F /* vpx_codec.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1B9212E2AAD009F73EC /* vpx_codec.c */; };
+               418B14E12165959F0046E03F /* vpx_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1BB212E2AAD009F73EC /* vpx_decoder.c */; };
+               418B14E22165959F0046E03F /* vpx_encoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1BA212E2AAD009F73EC /* vpx_encoder.c */; };
+               418B14E32165959F0046E03F /* vpx_image.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EAF1BC212E2AAD009F73EC /* vpx_image.c */; };
+               419100B02152EC9000A6F17B /* denoising_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100A82152EC7400A6F17B /* denoising_neon.c */; };
+               419100B12152EC9000A6F17B /* fastquantizeb_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100AA2152EC7500A6F17B /* fastquantizeb_neon.c */; };
+               419100B22152EC9000A6F17B /* shortfdct_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100AB2152EC7500A6F17B /* shortfdct_neon.c */; };
+               419100B32152EC9000A6F17B /* vp8_shortwalsh4x4_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100A92152EC7400A6F17B /* vp8_shortwalsh4x4_neon.c */; };
+               419100D62152ECE200A6F17B /* loopfilter_arm.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100B62152ECD300A6F17B /* loopfilter_arm.c */; };
+               419100D72152ECE700A6F17B /* bilinearpredict_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100BD2152ECDC00A6F17B /* bilinearpredict_neon.c */; };
+               419100D82152ECE700A6F17B /* copymem_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100BC2152ECDC00A6F17B /* copymem_neon.c */; };
+               419100D92152ECE700A6F17B /* dc_only_idct_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100B82152ECDB00A6F17B /* dc_only_idct_add_neon.c */; };
+               419100DA2152ECE700A6F17B /* dequant_idct_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100BB2152ECDC00A6F17B /* dequant_idct_neon.c */; };
+               419100DB2152ECE700A6F17B /* dequantizeb_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100C62152ECDE00A6F17B /* dequantizeb_neon.c */; };
+               419100DC2152ECE700A6F17B /* idct_blk_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100BE2152ECDC00A6F17B /* idct_blk_neon.c */; };
+               419100DD2152ECE700A6F17B /* idct_dequant_0_2x_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100BA2152ECDB00A6F17B /* idct_dequant_0_2x_neon.c */; };
+               419100DE2152ECE700A6F17B /* idct_dequant_full_2x_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100C22152ECDD00A6F17B /* idct_dequant_full_2x_neon.c */; };
+               419100DF2152ECE700A6F17B /* iwalsh_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100C12152ECDD00A6F17B /* iwalsh_neon.c */; };
+               419100E02152ECE700A6F17B /* loopfiltersimplehorizontaledge_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100C02152ECDD00A6F17B /* loopfiltersimplehorizontaledge_neon.c */; };
+               419100E12152ECE700A6F17B /* loopfiltersimpleverticaledge_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100C42152ECDD00A6F17B /* loopfiltersimpleverticaledge_neon.c */; };
+               419100E22152ECE700A6F17B /* mbloopfilter_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100C32152ECDD00A6F17B /* mbloopfilter_neon.c */; };
+               419100E32152ECE700A6F17B /* shortidct4x4llm_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100BF2152ECDC00A6F17B /* shortidct4x4llm_neon.c */; };
+               419100E42152ECE700A6F17B /* sixtappredict_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100C52152ECDE00A6F17B /* sixtappredict_neon.c */; };
+               419100E52152ECE700A6F17B /* vp8_loopfilter_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100B92152ECDB00A6F17B /* vp8_loopfilter_neon.c */; };
</ins><span class="cx">           4192413A2127372400634FCF /* features_extraction.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241312127372200634FCF /* features_extraction.cc */; };
</span><span class="cx">          4192413B2127372400634FCF /* features_extraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241322127372200634FCF /* features_extraction.h */; };
</span><span class="cx">          4192413C2127372400634FCF /* pitch_search.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241332127372300634FCF /* pitch_search.h */; };
</span><span class="lines">@@ -962,6 +1065,27 @@
</span><span class="cx">          41A392201EFC5CF500C4516A /* e_aes.c in Sources */ = {isa = PBXBuildFile; fileRef = 41A3918C1EFC44EA00C4516A /* e_aes.c */; };
</span><span class="cx">          41A392211EFC5CFA00C4516A /* aes.c in Sources */ = {isa = PBXBuildFile; fileRef = 41A391EB1EFC493000C4516A /* aes.c */; };
</span><span class="cx">          41AF2D14212CD6AF00D033D5 /* RTCVideoDecoderH264.mm in Sources */ = {isa = PBXBuildFile; fileRef = 413A23F81FE1987C00373E99 /* RTCVideoDecoderH264.mm */; };
</span><ins>+               41B675B7216599A80040A75D /* highbd_idct16x16_add_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3CF212E2D9100E22482 /* highbd_idct16x16_add_sse2.c */; };
+               41B675B9216599A80040A75D /* highbd_idct32x32_add_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C6290E212E2DE2002313D4 /* highbd_idct32x32_add_sse2.c */; };
+               41B675BB216599A80040A75D /* highbd_idct4x4_add_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62910212E2DE3002313D4 /* highbd_idct4x4_add_sse2.c */; };
+               41B675BD216599A80040A75D /* highbd_idct8x8_add_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3D1212E2D9200E22482 /* highbd_idct8x8_add_sse2.c */; };
+               41B675BF216599A80040A75D /* highbd_intrapred_intrin_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3C6212E2D8F00E22482 /* highbd_intrapred_intrin_sse2.c */; };
+               41B675C0216599A80040A75D /* highbd_intrapred_intrin_ssse3.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3D8212E2D9300E22482 /* highbd_intrapred_intrin_ssse3.c */; };
+               41B675C1216599A80040A75D /* highbd_loopfilter_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3C5212E2D8F00E22482 /* highbd_loopfilter_sse2.c */; };
+               41B675C2216599A80040A75D /* highbd_quantize_intrin_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62912212E2DE4002313D4 /* highbd_quantize_intrin_sse2.c */; };
+               41B675C3216599A80040A75D /* highbd_variance_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62916212E2DE6002313D4 /* highbd_variance_sse2.c */; };
+               41BA04C3216598C700B527E0 /* denoising_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731DE212E045E001280EB /* denoising_sse2.c */; };
+               41BA04E22165992800B527E0 /* blockd.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502072152E01B0033B4D3 /* blockd.h */; };
+               41BA04E32165992800B527E0 /* default_coef_probs.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502092152E01B0033B4D3 /* default_coef_probs.h */; };
+               41BA04E42165992800B527E0 /* onyxd.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502052152E01A0033B4D3 /* onyxd.h */; };
+               41BA04E52165992800B527E0 /* quant_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 411ED02F212E04BD004320BA /* quant_common.c */; };
+               41BA04E62165992800B527E0 /* threading.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502082152E01B0033B4D3 /* threading.h */; };
+               41BA04E72165992800B527E0 /* vp8_entropymodedata.h in Headers */ = {isa = PBXBuildFile; fileRef = 4145020A2152E01B0033B4D3 /* vp8_entropymodedata.h */; };
+               41BA04E82165992800B527E0 /* vp8_skin_detection.h in Headers */ = {isa = PBXBuildFile; fileRef = 414502062152E01B0033B4D3 /* vp8_skin_detection.h */; };
+               41BAE3C0212E2C5B00E22482 /* vpx_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = 41330A39212E2C3600280939 /* vpx_thread.c */; };
+               41BAE3C1212E2C5B00E22482 /* vpx_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 41330A36212E2C3500280939 /* vpx_thread.h */; };
+               41BAE3C2212E2C5B00E22482 /* vpx_write_yuv_frame.c in Sources */ = {isa = PBXBuildFile; fileRef = 41330A37212E2C3600280939 /* vpx_write_yuv_frame.c */; };
+               41BAE3C3212E2C5B00E22482 /* vpx_write_yuv_frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 41330A38212E2C3600280939 /* vpx_write_yuv_frame.h */; };
</ins><span class="cx">           41BCE753214C81A800A748F1 /* VideoProcessingSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEAFB20646664009D5141 /* VideoProcessingSoftLink.h */; };
</span><span class="cx">          41BE7176215C459000A7B196 /* bc-align.c in Sources */ = {isa = PBXBuildFile; fileRef = 415667A2215BE7750032296A /* bc-align.c */; };
</span><span class="cx">          41BE7177215C459000A7B196 /* bc-data.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F77D43215BE74A00E72967 /* bc-data.c */; };
</span><span class="lines">@@ -1004,7 +1128,118 @@
</span><span class="cx">          41BE71CF215C464800A7B196 /* valparam.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BE7187215C463100A7B196 /* valparam.c */; };
</span><span class="cx">          41BE71D0215C464800A7B196 /* value.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BE7196215C463400A7B196 /* value.c */; };
</span><span class="cx">          41BE71D1215C464800A7B196 /* xmalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BE7185215C463100A7B196 /* xmalloc.c */; };
</span><ins>+               41C628FA212E2DB0002313D4 /* avg_intrin_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3CC212E2D9100E22482 /* avg_intrin_sse2.c */; };
+               41C628FC212E2DB0002313D4 /* fwd_txfm_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3D0212E2D9200E22482 /* fwd_txfm_sse2.c */; };
+               41C62907212E2DB0002313D4 /* loopfilter_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3CA212E2D9000E22482 /* loopfilter_sse2.c */; };
+               41C6290B212E2DB0002313D4 /* vpx_asm_stubs.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3CE212E2D9100E22482 /* vpx_asm_stubs.c */; };
+               41C6290D212E2DB0002313D4 /* vpx_subpixel_8t_intrin_ssse3.c in Sources */ = {isa = PBXBuildFile; fileRef = 41BAE3C9212E2D9000E22482 /* vpx_subpixel_8t_intrin_ssse3.c */; };
+               41C6291D212E2DE9002313D4 /* quantize_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C6290F212E2DE3002313D4 /* quantize_sse2.c */; };
+               41C6291F212E2DE9002313D4 /* avg_pred_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62911212E2DE4002313D4 /* avg_pred_sse2.c */; };
+               41C62922212E2DE9002313D4 /* variance_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62914212E2DE5002313D4 /* variance_sse2.c */; };
+               41C62923212E2DE9002313D4 /* quantize_ssse3.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62915212E2DE5002313D4 /* quantize_ssse3.c */; };
+               41C62925212E2DE9002313D4 /* inv_txfm_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62917212E2DE6002313D4 /* inv_txfm_sse2.c */; };
+               41C62927212E2DE9002313D4 /* inv_txfm_ssse3.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C62919212E2DE7002313D4 /* inv_txfm_ssse3.c */; };
+               41C62928212E2DE9002313D4 /* sum_squares_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41C6291A212E2DE8002313D4 /* sum_squares_sse2.c */; };
</ins><span class="cx">           41C62936212E2EE5002313D4 /* default_temporal_layers.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419C842B1FE24E7E0040C30F /* default_temporal_layers.cc */; };
</span><ins>+               41C62937212E2F1E002313D4 /* alloccommon.c in Sources */ = {isa = PBXBuildFile; fileRef = 41673201212E0490001280EB /* alloccommon.c */; };
+               41C62938212E2F1E002313D4 /* blockd.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731EC212E048B001280EB /* blockd.c */; };
+               41C62939212E2F1E002313D4 /* context.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F3212E048D001280EB /* context.c */; };
+               41C6293A212E2F1E002313D4 /* copy_c.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731FF212E048F001280EB /* copy_c.c */; };
+               41C6293B212E2F1E002313D4 /* debugmodes.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F7212E048E001280EB /* debugmodes.c */; };
+               41C6293C212E2F1E002313D4 /* dequantize.c in Sources */ = {isa = PBXBuildFile; fileRef = 41673200212E048F001280EB /* dequantize.c */; };
+               41C6293D212E2F1E002313D4 /* entropy.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731FC212E048F001280EB /* entropy.c */; };
+               41C6293E212E2F1E002313D4 /* entropymode.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F9212E048E001280EB /* entropymode.c */; };
+               41C6293F212E2F1E002313D4 /* entropymv.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731EE212E048C001280EB /* entropymv.c */; };
+               41C62940212E2F1E002313D4 /* extend.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731FB212E048E001280EB /* extend.c */; };
+               41C62941212E2F1E002313D4 /* filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F6212E048D001280EB /* filter.c */; };
+               41C62942212E2F1E002313D4 /* findnearmv.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731FE212E048F001280EB /* findnearmv.c */; };
+               41C62943212E2F1E002313D4 /* idct_blk.c in Sources */ = {isa = PBXBuildFile; fileRef = 41673206212E0491001280EB /* idct_blk.c */; };
+               41C62944212E2F1E002313D4 /* idctllm.c in Sources */ = {isa = PBXBuildFile; fileRef = 41673204212E0491001280EB /* idctllm.c */; };
+               41C62945212E2F1E002313D4 /* loopfilter_filters.c in Sources */ = {isa = PBXBuildFile; fileRef = 41673202212E0490001280EB /* loopfilter_filters.c */; };
+               41C62946212E2F1E002313D4 /* mbpitch.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731FD212E048F001280EB /* mbpitch.c */; };
+               41C62947212E2F1E002313D4 /* mfqe.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731ED212E048C001280EB /* mfqe.c */; };
+               41C62948212E2F1E002313D4 /* modecont.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731EB212E048B001280EB /* modecont.c */; };
+               41C62949212E2F1E002313D4 /* postproc.c in Sources */ = {isa = PBXBuildFile; fileRef = 41673205212E0491001280EB /* postproc.c */; };
+               41C6294A212E2F1E002313D4 /* reconinter.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F2212E048D001280EB /* reconinter.c */; };
+               41C6294B212E2F1E002313D4 /* reconintra.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F4212E048D001280EB /* reconintra.c */; };
+               41C6294C212E2F1E002313D4 /* reconintra4x4.c in Sources */ = {isa = PBXBuildFile; fileRef = 41673203212E0490001280EB /* reconintra4x4.c */; };
+               41C6294D212E2F1E002313D4 /* rtcd.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F0212E048C001280EB /* rtcd.c */; };
+               41C6294E212E2F1E002313D4 /* setupintrarecon.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731EF212E048C001280EB /* setupintrarecon.c */; };
+               41C6294F212E2F1E002313D4 /* swapyv12buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F8212E048E001280EB /* swapyv12buffer.c */; };
+               41C62950212E2F1E002313D4 /* treecoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F1212E048C001280EB /* treecoder.c */; };
+               41C62951212E2F1E002313D4 /* vp8_loopfilter.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731FA212E048E001280EB /* vp8_loopfilter.c */; };
+               41C62952212E2F1E002313D4 /* vp8_skin_detection.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731F5212E048D001280EB /* vp8_skin_detection.c */; };
+               41C62953212E2FA6002313D4 /* vp8_rtcd.h in Headers */ = {isa = PBXBuildFile; fileRef = 4105EB9B212E02CC008C0C20 /* vp8_rtcd.h */; };
+               41CB0A04215C8D760097B8AA /* subpixel_mmx.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09F7215C8D730097B8AA /* subpixel_mmx.asm */; };
+               41CB0A05215C8D760097B8AA /* loopfilter_block_sse2_x86_64.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09F8215C8D730097B8AA /* loopfilter_block_sse2_x86_64.asm */; };
+               41CB0A06215C8D760097B8AA /* loopfilter_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09F9215C8D740097B8AA /* loopfilter_sse2.asm */; };
+               41CB0A07215C8D760097B8AA /* idctllm_mmx.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09FA215C8D740097B8AA /* idctllm_mmx.asm */; };
+               41CB0A08215C8D760097B8AA /* idctllm_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09FB215C8D740097B8AA /* idctllm_sse2.asm */; };
+               41CB0A09215C8D760097B8AA /* mfqe_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09FC215C8D740097B8AA /* mfqe_sse2.asm */; };
+               41CB0A0A215C8D760097B8AA /* copy_sse3.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09FD215C8D750097B8AA /* copy_sse3.asm */; };
+               41CB0A0B215C8D760097B8AA /* recon_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09FE215C8D750097B8AA /* recon_sse2.asm */; };
+               41CB0A0C215C8D760097B8AA /* dequantize_mmx.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB09FF215C8D750097B8AA /* dequantize_mmx.asm */; };
+               41CB0A0D215C8D760097B8AA /* recon_mmx.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A00215C8D750097B8AA /* recon_mmx.asm */; };
+               41CB0A0E215C8D760097B8AA /* copy_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A01215C8D750097B8AA /* copy_sse2.asm */; };
+               41CB0A0F215C8D760097B8AA /* subpixel_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A02215C8D760097B8AA /* subpixel_sse2.asm */; };
+               41CB0A10215C8D760097B8AA /* iwalsh_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A03215C8D760097B8AA /* iwalsh_sse2.asm */; };
+               41CB0A11215C8D940097B8AA /* vpx_config.asm in Sources */ = {isa = PBXBuildFile; fileRef = 4105EB9F212E02CC008C0C20 /* vpx_config.asm */; };
+               41CB0A28215C8DAB0097B8AA /* fwd_txfm_impl_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A12215C8DA40097B8AA /* fwd_txfm_impl_sse2.h */; };
+               41CB0A29215C8DAB0097B8AA /* mem_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A13215C8DA40097B8AA /* mem_sse2.h */; };
+               41CB0A2A215C8DAB0097B8AA /* sad_sse3.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A14215C8DA40097B8AA /* sad_sse3.asm */; };
+               41CB0A2B215C8DAB0097B8AA /* bitdepth_conversion_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A15215C8DA40097B8AA /* bitdepth_conversion_sse2.asm */; };
+               41CB0A2C215C8DAB0097B8AA /* txfm_common_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A16215C8DA50097B8AA /* txfm_common_sse2.h */; };
+               41CB0A2D215C8DAB0097B8AA /* avg_ssse3_x86_64.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A17215C8DA50097B8AA /* avg_ssse3_x86_64.asm */; };
+               41CB0A2E215C8DAB0097B8AA /* transpose_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A18215C8DA50097B8AA /* transpose_sse2.h */; };
+               41CB0A2F215C8DAB0097B8AA /* convolve_ssse3.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A19215C8DA50097B8AA /* convolve_ssse3.h */; };
+               41CB0A30215C8DAB0097B8AA /* highbd_intrapred_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A1A215C8DA60097B8AA /* highbd_intrapred_sse2.asm */; };
+               41CB0A31215C8DAB0097B8AA /* quantize_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A1B215C8DA60097B8AA /* quantize_x86.h */; };
+               41CB0A33215C8DAB0097B8AA /* fwd_txfm_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A1D215C8DA60097B8AA /* fwd_txfm_sse2.h */; };
+               41CB0A34215C8DAB0097B8AA /* highbd_inv_txfm_sse4.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A1E215C8DA60097B8AA /* highbd_inv_txfm_sse4.h */; };
+               41CB0A35215C8DAB0097B8AA /* inv_txfm_ssse3.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A1F215C8DA70097B8AA /* inv_txfm_ssse3.h */; };
+               41CB0A36215C8DAB0097B8AA /* bitdepth_conversion_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A20215C8DA90097B8AA /* bitdepth_conversion_sse2.h */; };
+               41CB0A37215C8DAB0097B8AA /* fwd_dct32x32_impl_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A21215C8DA90097B8AA /* fwd_dct32x32_impl_sse2.h */; };
+               41CB0A39215C8DAB0097B8AA /* inv_txfm_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A23215C8DAA0097B8AA /* inv_txfm_sse2.h */; };
+               41CB0A3A215C8DAB0097B8AA /* vpx_high_subpixel_bilinear_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A24215C8DAA0097B8AA /* vpx_high_subpixel_bilinear_sse2.asm */; };
+               41CB0A3B215C8DAB0097B8AA /* convolve.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A25215C8DAA0097B8AA /* convolve.h */; };
+               41CB0A3C215C8DAB0097B8AA /* highbd_inv_txfm_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CB0A26215C8DAA0097B8AA /* highbd_inv_txfm_sse2.h */; };
+               41CB0A3E215C8DC90097B8AA /* add_noise_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6296D212E3655002313D4 /* add_noise_sse2.asm */; };
+               41CB0A3F215C8DC90097B8AA /* deblock_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62967212E3653002313D4 /* deblock_sse2.asm */; };
+               41CB0A40215C8DC90097B8AA /* fwd_txfm_ssse3_x86_64.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62972212E3656002313D4 /* fwd_txfm_ssse3_x86_64.asm */; };
+               41CB0A41215C8DC90097B8AA /* highbd_sad_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62961212E3652002313D4 /* highbd_sad_sse2.asm */; };
+               41CB0A42215C8DC90097B8AA /* highbd_sad4d_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6296C212E3654002313D4 /* highbd_sad4d_sse2.asm */; };
+               41CB0A43215C8DC90097B8AA /* highbd_subpel_variance_impl_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62964212E3653002313D4 /* highbd_subpel_variance_impl_sse2.asm */; };
+               41CB0A44215C8DC90097B8AA /* highbd_variance_impl_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62966212E3653002313D4 /* highbd_variance_impl_sse2.asm */; };
+               41CB0A45215C8DC90097B8AA /* intrapred_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62970212E3655002313D4 /* intrapred_sse2.asm */; };
+               41CB0A46215C8DC90097B8AA /* intrapred_ssse3.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6296A212E3654002313D4 /* intrapred_ssse3.asm */; };
+               41CB0A47215C8DC90097B8AA /* inv_wht_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62960212E3652002313D4 /* inv_wht_sse2.asm */; };
+               41CB0A48215C8DC90097B8AA /* sad_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6296E212E3655002313D4 /* sad_sse2.asm */; };
+               41CB0A49215C8DC90097B8AA /* sad_sse4.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62968212E3654002313D4 /* sad_sse4.asm */; };
+               41CB0A4A215C8DC90097B8AA /* sad_ssse3.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6295E212E3652002313D4 /* sad_ssse3.asm */; };
+               41CB0A4B215C8DC90097B8AA /* sad4d_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62969212E3654002313D4 /* sad4d_sse2.asm */; };
+               41CB0A4C215C8DC90097B8AA /* ssim_opt_x86_64.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6295F212E3652002313D4 /* ssim_opt_x86_64.asm */; };
+               41CB0A4D215C8DC90097B8AA /* subpel_variance_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62973212E3656002313D4 /* subpel_variance_sse2.asm */; };
+               41CB0A4E215C8DC90097B8AA /* subtract_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62963212E3653002313D4 /* subtract_sse2.asm */; };
+               41CB0A4F215C8DC90097B8AA /* vpx_convolve_copy_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62962212E3652002313D4 /* vpx_convolve_copy_sse2.asm */; };
+               41CB0A50215C8DC90097B8AA /* vpx_high_subpixel_8t_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62965212E3653002313D4 /* vpx_high_subpixel_8t_sse2.asm */; };
+               41CB0A51215C8DC90097B8AA /* vpx_subpixel_8t_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62971212E3656002313D4 /* vpx_subpixel_8t_sse2.asm */; };
+               41CB0A52215C8DC90097B8AA /* vpx_subpixel_8t_ssse3.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6296B212E3654002313D4 /* vpx_subpixel_8t_ssse3.asm */; };
+               41CB0A53215C8DC90097B8AA /* vpx_subpixel_bilinear_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C6296F212E3655002313D4 /* vpx_subpixel_bilinear_sse2.asm */; };
+               41CB0A54215C8DC90097B8AA /* vpx_subpixel_bilinear_ssse3.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41C62974212E3656002313D4 /* vpx_subpixel_bilinear_ssse3.asm */; };
+               41CB0A56215C8DDA0097B8AA /* emms.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A55215C8DDA0097B8AA /* emms.asm */; };
+               41CB0A59215C90500097B8AA /* subpixel_ssse3.asm in Sources */ = {isa = PBXBuildFile; fileRef = 41CB0A58215C90500097B8AA /* subpixel_ssse3.asm */; };
+               41CB0A5A215C90750097B8AA /* dct_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 416731DC212E045D001280EB /* dct_sse2.asm */; };
+               41CB0A5B215C90750097B8AA /* encodeopt.asm in Sources */ = {isa = PBXBuildFile; fileRef = 416731D9212E045D001280EB /* encodeopt.asm */; };
+               41CB0A5C215C90750097B8AA /* fwalsh_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 416731E1212E045E001280EB /* fwalsh_sse2.asm */; };
+               41CB0A5D215C90750097B8AA /* temporal_filter_apply_sse2.asm in Sources */ = {isa = PBXBuildFile; fileRef = 416731E0212E045E001280EB /* temporal_filter_apply_sse2.asm */; };
+               41CBAF94212E039300DE1E1D /* dboolhuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 4105EBB5212E035D008C0C20 /* dboolhuff.c */; };
+               41CBAF95212E039300DE1E1D /* decodeframe.c in Sources */ = {isa = PBXBuildFile; fileRef = 4105EBB2212E035C008C0C20 /* decodeframe.c */; };
+               41CBAF96212E039300DE1E1D /* decodemv.c in Sources */ = {isa = PBXBuildFile; fileRef = 41CBAF90212E037E00DE1E1D /* decodemv.c */; };
+               41CBAF97212E039300DE1E1D /* decoderthreading.h in Headers */ = {isa = PBXBuildFile; fileRef = 4105EBB7212E035D008C0C20 /* decoderthreading.h */; };
+               41CBAF98212E039300DE1E1D /* detokenize.c in Sources */ = {isa = PBXBuildFile; fileRef = 4105EBB4212E035D008C0C20 /* detokenize.c */; };
+               41CBAF9A212E039300DE1E1D /* onyxd_if.c in Sources */ = {isa = PBXBuildFile; fileRef = 4105EBB1212E035C008C0C20 /* onyxd_if.c */; };
+               41CBAF9B212E039300DE1E1D /* threading.c in Sources */ = {isa = PBXBuildFile; fileRef = 4105EBB3212E035C008C0C20 /* threading.c */; };
+               41CBAF9C212E039300DE1E1D /* treereader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4105EBB6212E035D008C0C20 /* treereader.h */; };
</ins><span class="cx">           41D12414215C51D80036B057 /* dwarf2-info.c in Sources */ = {isa = PBXBuildFile; fileRef = 41D1240E215C51CE0036B057 /* dwarf2-info.c */; };
</span><span class="cx">          41D12415215C51D80036B057 /* dwarf2-aranges.c in Sources */ = {isa = PBXBuildFile; fileRef = 419EA20F215C51B60082BFD2 /* dwarf2-aranges.c */; };
</span><span class="cx">          41D12416215C51D80036B057 /* dwarf2-dbgfmt.c in Sources */ = {isa = PBXBuildFile; fileRef = 419EA20E215C51B60082BFD2 /* dwarf2-dbgfmt.c */; };
</span><span class="lines">@@ -1157,6 +1392,47 @@
</span><span class="cx">          41ECEAFC20646664009D5141 /* EncoderUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEAF920646663009D5141 /* EncoderUtilities.h */; };
</span><span class="cx">          41ECEAFD20646664009D5141 /* VideoProcessingSoftLink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAFA20646663009D5141 /* VideoProcessingSoftLink.cpp */; };
</span><span class="cx">          41ECEAFE20646664009D5141 /* VideoProcessingSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEAFB20646664009D5141 /* VideoProcessingSoftLink.h */; };
</span><ins>+               41EED77C2152ED8E000F2A16 /* avg_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478832152ED4300275257 /* avg_neon.c */; };
+               41EED77D2152ED8E000F2A16 /* avg_pred_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4194786E2152ED3D00275257 /* avg_pred_neon.c */; };
+               41EED77E2152ED8E000F2A16 /* deblock_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 41953C042152ED6300136625 /* deblock_neon.c */; };
+               41EED77F2152ED8E000F2A16 /* fdct_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100F02152ED1800A6F17B /* fdct_neon.c */; };
+               41EED7802152ED8E000F2A16 /* fdct_partial_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478812152ED4300275257 /* fdct_partial_neon.c */; };
+               41EED7812152ED8E000F2A16 /* fdct16x16_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4194788B2152ED4600275257 /* fdct16x16_neon.c */; };
+               41EED7822152ED8E000F2A16 /* fdct32x32_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478802152ED4300275257 /* fdct32x32_neon.c */; };
+               41EED7832152ED8E000F2A16 /* fwd_txfm_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 41953C062152ED6300136625 /* fwd_txfm_neon.c */; };
+               41EED7842152ED8E000F2A16 /* hadamard_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478752152ED4000275257 /* hadamard_neon.c */; };
+               41EED7942152ED8E000F2A16 /* idct_neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 41953BFF2152ED6100136625 /* idct_neon.h */; };
+               41EED7962152ED8E000F2A16 /* idct4x4_1_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100EC2152ED1700A6F17B /* idct4x4_1_add_neon.c */; };
+               41EED7982152ED8E000F2A16 /* idct4x4_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478872152ED4500275257 /* idct4x4_add_neon.c */; };
+               41EED7992152ED8E000F2A16 /* idct8x8_1_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 41953C072152ED6400136625 /* idct8x8_1_add_neon.c */; };
+               41EED79A2152ED8E000F2A16 /* idct8x8_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100ED2152ED1700A6F17B /* idct8x8_add_neon.c */; };
+               41EED79B2152ED8E000F2A16 /* idct16x16_1_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100F22152ED1800A6F17B /* idct16x16_1_add_neon.c */; };
+               41EED79C2152ED8E000F2A16 /* idct16x16_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4194787F2152ED4300275257 /* idct16x16_add_neon.c */; };
+               41EED79D2152ED8E000F2A16 /* idct32x32_1_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478782152ED4100275257 /* idct32x32_1_add_neon.c */; };
+               41EED79E2152ED8E000F2A16 /* idct32x32_34_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100E72152ED1600A6F17B /* idct32x32_34_add_neon.c */; };
+               41EED79F2152ED8E000F2A16 /* idct32x32_135_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478792152ED4100275257 /* idct32x32_135_add_neon.c */; };
+               41EED7A02152ED8E000F2A16 /* idct32x32_add_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478892152ED4500275257 /* idct32x32_add_neon.c */; };
+               41EED7A22152ED8E000F2A16 /* intrapred_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478822152ED4300275257 /* intrapred_neon.c */; };
+               41EED7A62152ED8E000F2A16 /* loopfilter_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4194787E2152ED4200275257 /* loopfilter_neon.c */; };
+               41EED7A72152ED8E000F2A16 /* mem_neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 419100E92152ED1700A6F17B /* mem_neon.h */; };
+               41EED7A82152ED8E000F2A16 /* quantize_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 41953C092152ED6400136625 /* quantize_neon.c */; };
+               41EED7A92152ED8E000F2A16 /* sad_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 41953C022152ED6200136625 /* sad_neon.c */; };
+               41EED7AA2152ED8E000F2A16 /* sad4d_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100F52152ED1900A6F17B /* sad4d_neon.c */; };
+               41EED7AC2152ED8E000F2A16 /* subpel_variance_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478712152ED3E00275257 /* subpel_variance_neon.c */; };
+               41EED7AD2152ED8E000F2A16 /* subtract_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4194787B2152ED4200275257 /* subtract_neon.c */; };
+               41EED7AE2152ED8E000F2A16 /* sum_neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 419478842152ED4400275257 /* sum_neon.h */; };
+               41EED7AF2152ED8E000F2A16 /* transpose_neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 419100EF2152ED1800A6F17B /* transpose_neon.h */; };
+               41EED7B02152ED8E000F2A16 /* variance_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4194787D2152ED4200275257 /* variance_neon.c */; };
+               41EED7B22152ED8E000F2A16 /* vpx_convolve_avg_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419478732152ED3F00275257 /* vpx_convolve_avg_neon.c */; };
+               41EED7B42152ED8E000F2A16 /* vpx_convolve_copy_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100EA2152ED1700A6F17B /* vpx_convolve_copy_neon.c */; };
+               41EED7B52152ED8E000F2A16 /* vpx_convolve_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EED77B2152ED84000F2A16 /* vpx_convolve_neon.c */; };
+               41EED7B82152ED8E000F2A16 /* vpx_convolve8_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100F32152ED1800A6F17B /* vpx_convolve8_neon.c */; };
+               41EED7B92152ED8E000F2A16 /* vpx_convolve8_neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4194786F2152ED3D00275257 /* vpx_convolve8_neon.h */; };
+               41EED7BA2152ED8E000F2A16 /* vpx_scaled_convolve8_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 419100F42152ED1900A6F17B /* vpx_scaled_convolve8_neon.c */; };
+               41EED7BD2152EEC9000F2A16 /* arm.h in Headers */ = {isa = PBXBuildFile; fileRef = 41EED7BB2152EEC8000F2A16 /* arm.h */; };
+               41EED7BE2152EEC9000F2A16 /* arm_cpudetect.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EED7BC2152EEC8000F2A16 /* arm_cpudetect.c */; };
+               41EED7BF2152F1FB000F2A16 /* onyx_if.c in Sources */ = {isa = PBXBuildFile; fileRef = 416731A8212E0426001280EB /* onyx_if.c */; };
+               41EED7DC21531E5F000F2A16 /* sad.c in Sources */ = {isa = PBXBuildFile; fileRef = 413309F0212E2BD600280939 /* sad.c */; };
</ins><span class="cx">           41F2635F21267ADF00274F59 /* builtin_video_decoder_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB27321267AC000296D47 /* builtin_video_decoder_factory.cc */; };
</span><span class="cx">          41F2636021267ADF00274F59 /* builtin_video_decoder_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27621267AC100296D47 /* builtin_video_decoder_factory.h */; };
</span><span class="cx">          41F2636121267ADF00274F59 /* builtin_video_encoder_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27721267AC100296D47 /* builtin_video_encoder_factory.h */; };
</span><span class="lines">@@ -3038,7 +3314,42 @@
</span><span class="cx">          5CFD53941E4BD3A300482908 /* scale_neon64.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5CFD538C1E4BD3A300482908 /* scale_neon64.cc */; };
</span><span class="cx"> /* End PBXBuildFile section */
</span><span class="cx"> 
</span><ins>+/* Begin PBXBuildRule section */
+               41CB0A57215C8E060097B8AA /* PBXBuildRule */ = {
+                       isa = PBXBuildRule;
+                       compilerSpec = com.apple.compilers.proxy.script;
+                       filePatterns = asm;
+                       fileType = sourcecode.asm.asm;
+                       isEditable = 1;
+                       outputFiles = (
+                               "${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH}/${INPUT_FILE_BASE}.o",
+                       );
+                       script = "${BUILT_PRODUCTS_DIR}/yasm -fmacho64 -I ${SRCROOT}/Source/third_party/libvpx/source/config -I ${SRCROOT}/Source/third_party/libvpx/source/config/mac/x64 -I ${SRCROOT}/Source/third_party/libvpx/source/libvpx -o ${OBJECT_FILE_DIR_normal}/${CURRENT_ARCH}/${INPUT_FILE_BASE}.o ${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.asm\n";
+               };
+/* End PBXBuildRule section */
+
</ins><span class="cx"> /* Begin PBXContainerItemProxy section */
</span><ins>+               4105EB6B212E01D2008C0C20 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = FB39D0701200ED9200088E69 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 5C63F6611E414AB6002CA531;
+                       remoteInfo = "Copy webrtc headers";
+               };
+               411ED03F212E0811004320BA /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = FB39D0701200ED9200088E69 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 4105EB69212E01D2008C0C20;
+                       remoteInfo = libvpx;
+               };
+               41BE7173215BF42300A7B196 /* PBXContainerItemProxy */ = {
+                       isa = PBXContainerItemProxy;
+                       containerPortal = FB39D0701200ED9200088E69 /* Project object */;
+                       proxyType = 1;
+                       remoteGlobalIDString = 41F77D15215BE45E00E72967;
+                       remoteInfo = yasm;
+               };
</ins><span class="cx">           5C08848D1E4A97E300403995 /* PBXContainerItemProxy */ = {
</span><span class="cx">                  isa = PBXContainerItemProxy;
</span><span class="cx">                  containerPortal = FB39D0701200ED9200088E69 /* Project object */;
</span><span class="lines">@@ -3151,6 +3462,24 @@
</span><span class="cx">                  );
</span><span class="cx">                  runOnlyForDeploymentPostprocessing = 1;
</span><span class="cx">          };
</span><ins>+               4105EB7D212E01D2008C0C20 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 8;
+                       dstPath = "$(INSTALL_PATH_PREFIX)/usr/local/OpenSourceVersions";
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
+               4105EB7E212E01D2008C0C20 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 8;
+                       dstPath = "$(INSTALL_PATH_PREFIX)/usr/local/OpenSourceLicenses";
+                       dstSubfolderSpec = 0;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 1;
+               };
</ins><span class="cx">           41F77D14215BE45E00E72967 /* CopyFiles */ = {
</span><span class="cx">                  isa = PBXCopyFilesBuildPhase;
</span><span class="cx">                  buildActionMask = 2147483647;
</span><span class="lines">@@ -3327,6 +3656,7 @@
</span><span class="cx">          4102F6EB21273460006AE8D7 /* contributing_sources.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = contributing_sources.cc; sourceTree = "<group>"; };
</span><span class="cx">          41053B4D212CD8EC004DAC6C /* UIDevice+H264Profile.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "UIDevice+H264Profile.mm"; path = "Video/UIDevice+H264Profile.mm"; sourceTree = "<group>"; };
</span><span class="cx">          4105EB67212E01C2008C0C20 /* elf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = elf.h; sourceTree = "<group>"; };
</span><ins>+               4105EB83212E01D2008C0C20 /* libvpx.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libvpx.a; sourceTree = BUILT_PRODUCTS_DIR; };
</ins><span class="cx">           4105EB99212E02CB008C0C20 /* vpx_config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vpx_config.c; sourceTree = "<group>"; };
</span><span class="cx">          4105EB9A212E02CB008C0C20 /* vpx_scale_rtcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vpx_scale_rtcd.h; sourceTree = "<group>"; };
</span><span class="cx">          4105EB9B212E02CC008C0C20 /* vp8_rtcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vp8_rtcd.h; sourceTree = "<group>"; };
</span><span class="lines">@@ -3349,6 +3679,7 @@
</span><span class="cx">          411ED02F212E04BD004320BA /* quant_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_common.c; sourceTree = "<group>"; };
</span><span class="cx">          411ED031212E04CC004320BA /* vp8_cx_iface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vp8_cx_iface.c; sourceTree = "<group>"; };
</span><span class="cx">          411ED032212E04CC004320BA /* vp8_dx_iface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vp8_dx_iface.c; sourceTree = "<group>"; };
</span><ins>+               411ED035212E05DE004320BA /* libvpx.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = libvpx.xcconfig; sourceTree = "<group>"; };
</ins><span class="cx">           41239AE6214756C700396F81 /* filter_x86.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filter_x86.c; sourceTree = "<group>"; };
</span><span class="cx">          41239AE7214756C700396F81 /* idct_blk_mmx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = idct_blk_mmx.c; sourceTree = "<group>"; };
</span><span class="cx">          41239AE8214756C700396F81 /* vp8_asm_stubs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vp8_asm_stubs.c; sourceTree = "<group>"; };
</span><span class="lines">@@ -6901,6 +7232,13 @@
</span><span class="cx"> /* End PBXFileReference section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXFrameworksBuildPhase section */
</span><ins>+               4105EB7C212E01D2008C0C20 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
</ins><span class="cx">           41F77D13215BE45E00E72967 /* Frameworks */ = {
</span><span class="cx">                  isa = PBXFrameworksBuildPhase;
</span><span class="cx">                  buildActionMask = 2147483647;
</span><span class="lines">@@ -6962,6 +7300,7 @@
</span><span class="cx">                          5C0073041E5513E70042215A /* libopus.a in Frameworks */,
</span><span class="cx">                          5C0073051E5513E70042215A /* libsrtp.a in Frameworks */,
</span><span class="cx">                          5C0073061E5513E70042215A /* libusrsctp.a in Frameworks */,
</span><ins>+                               4129408D212E0D1800AD95E7 /* libvpx.a in Frameworks */,
</ins><span class="cx">                           5C0073071E5513E70042215A /* libwebrtcpcrtc.a in Frameworks */,
</span><span class="cx">                          5C0073081E5513E70042215A /* libyuv.a in Frameworks */,
</span><span class="cx">                          5C0073141E5514020042215A /* VideoToolbox.framework in Frameworks */,
</span><span class="lines">@@ -9418,18 +9757,9 @@
</span><span class="cx">          41F773FE215BE33300E72967 /* yasm-1.3.0 */ = {
</span><span class="cx">                  isa = PBXGroup;
</span><span class="cx">                  children = (
</span><del>-                       );
-                       path = "yasm-1.3.0";
-                       sourceTree = "<group>";
-               };
-               41F77D17215BE45E00E72967 /* yasm */ = {
-                       isa = PBXGroup;
-                       children = (
</del><span class="cx">                           41F77D26215BE6C500E72967 /* frontends */,
</span><span class="cx">                          41F77D24215BE6AD00E72967 /* libyasm */,
</span><span class="cx">                          41F77D25215BE6BA00E72967 /* modules */,
</span><del>-                               41F77D27215BE6D500E72967 /* plugins */,
-                               41F77D28215BE6E000E72967 /* tools */,
</del><span class="cx">                           41FE8667215C53CE00B62C07 /* gas-token.c */,
</span><span class="cx">                          41BE71DF215C470B00A7B196 /* libyasm-stdint.h */,
</span><span class="cx">                          41BE71E0215C470B00A7B196 /* license.c */,
</span><span class="lines">@@ -9438,8 +9768,7 @@
</span><span class="cx">                          41FE866C215C542100B62C07 /* x86cpu.c */,
</span><span class="cx">                          419EA205215C4B790082BFD2 /* x86regtmod.c */,
</span><span class="cx">                  );
</span><del>-                       name = yasm;
-                       path = "Source/third_party/yasm-1.3.0";
</del><ins>+                        path = "yasm-1.3.0";
</ins><span class="cx">                   sourceTree = "<group>";
</span><span class="cx">          };
</span><span class="cx">          41F77D24215BE6AD00E72967 /* libyasm */ = {
</span><span class="lines">@@ -9533,20 +9862,6 @@
</span><span class="cx">                  path = frontends;
</span><span class="cx">                  sourceTree = "<group>";
</span><span class="cx">          };
</span><del>-               41F77D27215BE6D500E72967 /* plugins */ = {
-                       isa = PBXGroup;
-                       children = (
-                       );
-                       path = plugins;
-                       sourceTree = "<group>";
-               };
-               41F77D28215BE6E000E72967 /* tools */ = {
-                       isa = PBXGroup;
-                       children = (
-                       );
-                       path = tools;
-                       sourceTree = "<group>";
-               };
</del><span class="cx">           41F9BFC32051CACE00ABF0B9 /* include */ = {
</span><span class="cx">                  isa = PBXGroup;
</span><span class="cx">                  children = (
</span><span class="lines">@@ -12945,6 +13260,7 @@
</span><span class="cx">                          5C4B43B01E42877A002651C8 /* boringssl.xcconfig */,
</span><span class="cx">                          5D7C59C71208C68B001C873E /* DebugRelease.xcconfig */,
</span><span class="cx">                          5C0884891E4A978C00403995 /* libsrtp.xcconfig */,
</span><ins>+                               411ED035212E05DE004320BA /* libvpx.xcconfig */,
</ins><span class="cx">                           41433D2B1F79B39200387B4D /* libwebrtc.iOS.exp */,
</span><span class="cx">                          41433D2D1F79B39200387B4D /* libwebrtc.iOSsim.exp */,
</span><span class="cx">                          41433D2C1F79B39200387B4D /* libwebrtc.mac.exp */,
</span><span class="lines">@@ -12964,7 +13280,6 @@
</span><span class="cx">                  isa = PBXGroup;
</span><span class="cx">                  children = (
</span><span class="cx">                          5D7C59C41208C68B001C873E /* Configurations */,
</span><del>-                               41F77D17215BE45E00E72967 /* yasm */,
</del><span class="cx">                           5CB3048A1DE4143400D2C405 /* Frameworks */,
</span><span class="cx">                          FB39D0CC1200EF9B00088E69 /* Products */,
</span><span class="cx">                          FB39D0841200EDEB00088E69 /* Source */,
</span><span class="lines">@@ -12988,6 +13303,7 @@
</span><span class="cx">                          5C4B4A8E1E42C336002651C8 /* libopus.a */,
</span><span class="cx">                          5C0884D11E4A97E300403995 /* libsrtp.a */,
</span><span class="cx">                          5C11A12D1E4577E1004F0987 /* libusrsctp.a */,
</span><ins>+                               4105EB83212E01D2008C0C20 /* libvpx.a */,
</ins><span class="cx">                           FB39D0D11200F0E300088E69 /* libwebrtc.dylib */,
</span><span class="cx">                          5C088C0B1E4AA3B100403995 /* libwebrtcpcrtc.a */,
</span><span class="cx">                          5C0884DE1E4A980100403995 /* libyuv.a */,
</span><span class="lines">@@ -12998,6 +13314,61 @@
</span><span class="cx"> /* End PBXGroup section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXHeadersBuildPhase section */
</span><ins>+               4105EB6C212E01D2008C0C20 /* Headers */ = {
+                       isa = PBXHeadersBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               41EED7BD2152EEC9000F2A16 /* arm.h in Headers */,
+                               41CB0A36215C8DAB0097B8AA /* bitdepth_conversion_sse2.h in Headers */,
+                               416731D2212E0430001280EB /* bitstream.h in Headers */,
+                               416731C1212E0430001280EB /* block.h in Headers */,
+                               41BA04E22165992800B527E0 /* blockd.h in Headers */,
+                               41CB0A3B215C8DAB0097B8AA /* convolve.h in Headers */,
+                               41CB0A2F215C8DAB0097B8AA /* convolve_ssse3.h in Headers */,
+                               416731C2212E0430001280EB /* dct_value_tokens.h in Headers */,
+                               41CBAF97212E039300DE1E1D /* decoderthreading.h in Headers */,
+                               41BA04E32165992800B527E0 /* default_coef_probs.h in Headers */,
+                               416731C4212E0430001280EB /* defaultcoefcounts.h in Headers */,
+                               416731D3212E0430001280EB /* denoising.h in Headers */,
+                               416731C6212E0430001280EB /* encodeframe.h in Headers */,
+                               416731C8212E0430001280EB /* encodeintra.h in Headers */,
+                               416731CB212E0430001280EB /* encodemv.h in Headers */,
+                               41659C092165975700CCBDC2 /* filter_x86.h in Headers */,
+                               416731CC212E0430001280EB /* firstpass.h in Headers */,
+                               41CB0A37215C8DAB0097B8AA /* fwd_dct32x32_impl_sse2.h in Headers */,
+                               41330A2A212E2BDF00280939 /* fwd_txfm.h in Headers */,
+                               41CB0A28215C8DAB0097B8AA /* fwd_txfm_impl_sse2.h in Headers */,
+                               41CB0A33215C8DAB0097B8AA /* fwd_txfm_sse2.h in Headers */,
+                               41CB0A3C215C8DAB0097B8AA /* highbd_inv_txfm_sse2.h in Headers */,
+                               41CB0A34215C8DAB0097B8AA /* highbd_inv_txfm_sse4.h in Headers */,
+                               41EED7942152ED8E000F2A16 /* idct_neon.h in Headers */,
+                               41CB0A39215C8DAB0097B8AA /* inv_txfm_sse2.h in Headers */,
+                               41CB0A35215C8DAB0097B8AA /* inv_txfm_ssse3.h in Headers */,
+                               416731D5212E0430001280EB /* mcomp.h in Headers */,
+                               41EED7A72152ED8E000F2A16 /* mem_neon.h in Headers */,
+                               41CB0A29215C8DAB0097B8AA /* mem_sse2.h in Headers */,
+                               416731CD212E0430001280EB /* onyx_int.h in Headers */,
+                               41BA04E42165992800B527E0 /* onyxd.h in Headers */,
+                               416731CE212E0430001280EB /* picklpf.h in Headers */,
+                               41CB0A31215C8DAB0097B8AA /* quantize_x86.h in Headers */,
+                               41EED7AE2152ED8E000F2A16 /* sum_neon.h in Headers */,
+                               41BA04E62165992800B527E0 /* threading.h in Headers */,
+                               416731D0212E0430001280EB /* tokenize.h in Headers */,
+                               41EED7AF2152ED8E000F2A16 /* transpose_neon.h in Headers */,
+                               41CB0A2E215C8DAB0097B8AA /* transpose_sse2.h in Headers */,
+                               41CBAF9C212E039300DE1E1D /* treereader.h in Headers */,
+                               41CB0A2C215C8DAB0097B8AA /* txfm_common_sse2.h in Headers */,
+                               41BA04E72165992800B527E0 /* vp8_entropymodedata.h in Headers */,
+                               41C62953212E2FA6002313D4 /* vp8_rtcd.h in Headers */,
+                               41BA04E82165992800B527E0 /* vp8_skin_detection.h in Headers */,
+                               41EED7B92152ED8E000F2A16 /* vpx_convolve8_neon.h in Headers */,
+                               41330A31212E2BF500280939 /* vpx_mem.h in Headers */,
+                               41330A35212E2C1F00280939 /* vpx_scale.h in Headers */,
+                               41BAE3C1212E2C5B00E22482 /* vpx_thread.h in Headers */,
+                               41BAE3C3212E2C5B00E22482 /* vpx_write_yuv_frame.h in Headers */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
</ins><span class="cx">           5C08848E1E4A97E300403995 /* Headers */ = {
</span><span class="cx">                  isa = PBXHeadersBuildPhase;
</span><span class="cx">                  buildActionMask = 2147483647;
</span><span class="lines">@@ -13362,7 +13733,6 @@
</span><span class="cx">                          5CDD86881E43B93900621E92 /* block_mean_calculator.h in Headers */,
</span><span class="cx">                          5CD285B11E6A63430094FDC8 /* block_processor.h in Headers */,
</span><span class="cx">                          5CD285AF1E6A63430094FDC8 /* block_processor_metrics.h in Headers */,
</span><del>-                               4145020D2152E01C0033B4D3 /* blockd.h in Headers */,
</del><span class="cx">                           5C4B4C621E431F9C002651C8 /* blocker.h in Headers */,
</span><span class="cx">                          413A238E1FE18E0700373E99 /* buffer.h in Headers */,
</span><span class="cx">                          5CDD8A0B1E43BFB300621E92 /* buffer_level_filter.h in Headers */,
</span><span class="lines">@@ -13465,7 +13835,6 @@
</span><span class="cx">                          41E02C87212734B900C27CD6 /* decoder_database.h in Headers */,
</span><span class="cx">                          5CDD8B921E43C2B500621E92 /* decoder_interpolate_lsf.h in Headers */,
</span><span class="cx">                          5CDD83CB1E439A6F00621E92 /* decoding_state.h in Headers */,
</span><del>-                               4145020F2152E01C0033B4D3 /* default_coef_probs.h in Headers */,
</del><span class="cx">                           5CD284981E6A5F410094FDC8 /* default_output_rate_calculator.h in Headers */,
</span><span class="cx">                          419C843B1FE24E800040C30F /* default_temporal_layers.h in Headers */,
</span><span class="cx">                          5CD2853A1E6A61980094FDC8 /* default_video_bitrate_allocator.h in Headers */,
</span><span class="lines">@@ -13815,7 +14184,6 @@
</span><span class="cx">                          413A23C01FE18E0800373E99 /* nullsocketserver.h in Headers */,
</span><span class="cx">                          5CD285331E6A61110094FDC8 /* nullwebrtcvideoengine.h in Headers */,
</span><span class="cx">                          413A23361FE18E0700373E99 /* onetimeevent.h in Headers */,
</span><del>-                               4145020B2152E01C0033B4D3 /* onyxd.h in Headers */,
</del><span class="cx">                           5CDD86951E43B93900621E92 /* ooura_fft.h in Headers */,
</span><span class="cx">                          5CDD86921E43B93900621E92 /* ooura_fft_tables_common.h in Headers */,
</span><span class="cx">                          41DDB266212679A300296D47 /* opensslcertificate.h in Headers */,
</span><span class="lines">@@ -14265,7 +14633,6 @@
</span><span class="cx">                          413A22C61FE18E0700373E99 /* thread_annotations.h in Headers */,
</span><span class="cx">                          413A22E81FE18E0700373E99 /* thread_checker.h in Headers */,
</span><span class="cx">                          413A22B81FE18E0700373E99 /* thread_checker_impl.h in Headers */,
</span><del>-                               4145020E2152E01C0033B4D3 /* threading.h in Headers */,
</del><span class="cx">                           5CDD84C41E43AF1300621E92 /* three_band_filter_bank.h in Headers */,
</span><span class="cx">                          5CDD8A581E43BFB300621E92 /* tick_timer.h in Headers */,
</span><span class="cx">                          419241DD21275A3000634FCF /* time_delta.h in Headers */,
</span><span class="lines">@@ -14388,9 +14755,7 @@
</span><span class="cx">                          5CDD89871E43BF3A00621E92 /* voip_metric.h in Headers */,
</span><span class="cx">                          4145F6171FE1EFCA00EB9CAF /* vp8.h in Headers */,
</span><span class="cx">                          419241F421275C3200634FCF /* vp8_encoder_simulcast_proxy.h in Headers */,
</span><del>-                               414502102152E01C0033B4D3 /* vp8_entropymodedata.h in Headers */,
</del><span class="cx">                           5CDD83861E439A3500621E92 /* vp8_header_parser.h in Headers */,
</span><del>-                               4145020C2152E01C0033B4D3 /* vp8_skin_detection.h in Headers */,
</del><span class="cx">                           5CDD8BF41E43C2B500621E92 /* vq3.h in Headers */,
</span><span class="cx">                          5CDD8BF61E43C2B500621E92 /* vq4.h in Headers */,
</span><span class="cx">                          5C4B4C811E431F9C002651C8 /* wav_file.h in Headers */,
</span><span class="lines">@@ -14424,6 +14789,28 @@
</span><span class="cx"> /* End PBXHeadersBuildPhase section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXNativeTarget section */
</span><ins>+               4105EB69212E01D2008C0C20 /* vpx */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 4105EB7F212E01D2008C0C20 /* Build configuration list for PBXNativeTarget "vpx" */;
+                       buildPhases = (
+                               4105EB6C212E01D2008C0C20 /* Headers */,
+                               4105EB74212E01D2008C0C20 /* Sources */,
+                               4105EB7C212E01D2008C0C20 /* Frameworks */,
+                               4105EB7D212E01D2008C0C20 /* CopyFiles */,
+                               4105EB7E212E01D2008C0C20 /* CopyFiles */,
+                       );
+                       buildRules = (
+                               41CB0A57215C8E060097B8AA /* PBXBuildRule */,
+                       );
+                       dependencies = (
+                               41BE7174215BF42300A7B196 /* PBXTargetDependency */,
+                               4105EB6A212E01D2008C0C20 /* PBXTargetDependency */,
+                       );
+                       name = vpx;
+                       productName = libwebrtc;
+                       productReference = 4105EB83212E01D2008C0C20 /* libvpx.a */;
+                       productType = "com.apple.product-type.library.static";
+               };
</ins><span class="cx">           41F77D15215BE45E00E72967 /* yasm */ = {
</span><span class="cx">                  isa = PBXNativeTarget;
</span><span class="cx">                  buildConfigurationList = 41F77D1A215BE45E00E72967 /* Build configuration list for PBXNativeTarget "yasm" */;
</span><span class="lines">@@ -14575,6 +14962,7 @@
</span><span class="cx">                  buildRules = (
</span><span class="cx">                  );
</span><span class="cx">                  dependencies = (
</span><ins>+                               411ED040212E0811004320BA /* PBXTargetDependency */,
</ins><span class="cx">                           5C088C0D1E4AA3FD00403995 /* PBXTargetDependency */,
</span><span class="cx">                          5C0884E01E4A982000403995 /* PBXTargetDependency */,
</span><span class="cx">                          5C0884E21E4A982000403995 /* PBXTargetDependency */,
</span><span class="lines">@@ -14630,6 +15018,7 @@
</span><span class="cx">                          5C08848B1E4A97E300403995 /* srtp */,
</span><span class="cx">                          5C0884D21E4A980100403995 /* yuv */,
</span><span class="cx">                          5C0885371E4AA3B100403995 /* webrtcpcrtc */,
</span><ins>+                               4105EB69212E01D2008C0C20 /* vpx */,
</ins><span class="cx">                           41F77D15215BE45E00E72967 /* yasm */,
</span><span class="cx">                  );
</span><span class="cx">          };
</span><span class="lines">@@ -14667,6 +15056,243 @@
</span><span class="cx"> /* End PBXShellScriptBuildPhase section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXSourcesBuildPhase section */
</span><ins>+               4105EB74212E01D2008C0C20 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               41330A13212E2BDF00280939 /* add_noise.c in Sources */,
+                               41CB0A3E215C8DC90097B8AA /* add_noise_sse2.asm in Sources */,
+                               41C62937212E2F1E002313D4 /* alloccommon.c in Sources */,
+                               41EED7BE2152EEC9000F2A16 /* arm_cpudetect.c in Sources */,
+                               41330A14212E2BDF00280939 /* avg.c in Sources */,
+                               41C628FA212E2DB0002313D4 /* avg_intrin_sse2.c in Sources */,
+                               41EED77C2152ED8E000F2A16 /* avg_neon.c in Sources */,
+                               41EED77D2152ED8E000F2A16 /* avg_pred_neon.c in Sources */,
+                               41C6291F212E2DE9002313D4 /* avg_pred_sse2.c in Sources */,
+                               41CB0A2D215C8DAB0097B8AA /* avg_ssse3_x86_64.asm in Sources */,
+                               419100D72152ECE700A6F17B /* bilinearpredict_neon.c in Sources */,
+                               41CB0A2B215C8DAB0097B8AA /* bitdepth_conversion_sse2.asm in Sources */,
+                               41330A15212E2BDF00280939 /* bitreader.c in Sources */,
+                               41330A28212E2BDF00280939 /* bitreader_buffer.c in Sources */,
+                               416731D1212E0430001280EB /* bitstream.c in Sources */,
+                               41330A16212E2BDF00280939 /* bitwriter.c in Sources */,
+                               41330A29212E2BDF00280939 /* bitwriter_buffer.c in Sources */,
+                               41C62938212E2F1E002313D4 /* blockd.c in Sources */,
+                               416731B3212E0430001280EB /* boolhuff.c in Sources */,
+                               41C62939212E2F1E002313D4 /* context.c in Sources */,
+                               41C6293A212E2F1E002313D4 /* copy_c.c in Sources */,
+                               41CB0A0E215C8D760097B8AA /* copy_sse2.asm in Sources */,
+                               41CB0A0A215C8D760097B8AA /* copy_sse3.asm in Sources */,
+                               419100D82152ECE700A6F17B /* copymem_neon.c in Sources */,
+                               41CBAF94212E039300DE1E1D /* dboolhuff.c in Sources */,
+                               419100D92152ECE700A6F17B /* dc_only_idct_add_neon.c in Sources */,
+                               416731C3212E0430001280EB /* dct.c in Sources */,
+                               41CB0A5A215C90750097B8AA /* dct_sse2.asm in Sources */,
+                               41330A17212E2BDF00280939 /* deblock.c in Sources */,
+                               41EED77E2152ED8E000F2A16 /* deblock_neon.c in Sources */,
+                               41CB0A3F215C8DC90097B8AA /* deblock_sse2.asm in Sources */,
+                               41C6293B212E2F1E002313D4 /* debugmodes.c in Sources */,
+                               41CBAF95212E039300DE1E1D /* decodeframe.c in Sources */,
+                               41CBAF96212E039300DE1E1D /* decodemv.c in Sources */,
+                               416731B4212E0430001280EB /* denoising.c in Sources */,
+                               419100B02152EC9000A6F17B /* denoising_neon.c in Sources */,
+                               41BA04C3216598C700B527E0 /* denoising_sse2.c in Sources */,
+                               419100DA2152ECE700A6F17B /* dequant_idct_neon.c in Sources */,
+                               41C6293C212E2F1E002313D4 /* dequantize.c in Sources */,
+                               41CB0A0C215C8D760097B8AA /* dequantize_mmx.asm in Sources */,
+                               419100DB2152ECE700A6F17B /* dequantizeb_neon.c in Sources */,
+                               41CBAF98212E039300DE1E1D /* detokenize.c in Sources */,
+                               41CB0A56215C8DDA0097B8AA /* emms.asm in Sources */,
+                               416731C5212E0430001280EB /* encodeframe.c in Sources */,
+                               416731C7212E0430001280EB /* encodeintra.c in Sources */,
+                               416731C9212E0430001280EB /* encodemb.c in Sources */,
+                               416731CA212E0430001280EB /* encodemv.c in Sources */,
+                               41CB0A5B215C90750097B8AA /* encodeopt.asm in Sources */,
+                               41C6293D212E2F1E002313D4 /* entropy.c in Sources */,
+                               41C6293E212E2F1E002313D4 /* entropymode.c in Sources */,
+                               41C6293F212E2F1E002313D4 /* entropymv.c in Sources */,
+                               416731B5212E0430001280EB /* ethreading.c in Sources */,
+                               41C62940212E2F1E002313D4 /* extend.c in Sources */,
+                               419100B12152EC9000A6F17B /* fastquantizeb_neon.c in Sources */,
+                               41330A18212E2BDF00280939 /* fastssim.c in Sources */,
+                               41EED7812152ED8E000F2A16 /* fdct16x16_neon.c in Sources */,
+                               41EED7822152ED8E000F2A16 /* fdct32x32_neon.c in Sources */,
+                               41EED77F2152ED8E000F2A16 /* fdct_neon.c in Sources */,
+                               41EED7802152ED8E000F2A16 /* fdct_partial_neon.c in Sources */,
+                               41C62941212E2F1E002313D4 /* filter.c in Sources */,
+                               41659C082165975700CCBDC2 /* filter_x86.c in Sources */,
+                               41C62942212E2F1E002313D4 /* findnearmv.c in Sources */,
+                               416731D4212E0430001280EB /* firstpass.c in Sources */,
+                               41CB0A5C215C90750097B8AA /* fwalsh_sse2.asm in Sources */,
+                               41330A19212E2BDF00280939 /* fwd_txfm.c in Sources */,
+                               41EED7832152ED8E000F2A16 /* fwd_txfm_neon.c in Sources */,
+                               41C628FC212E2DB0002313D4 /* fwd_txfm_sse2.c in Sources */,
+                               41CB0A40215C8DC90097B8AA /* fwd_txfm_ssse3_x86_64.asm in Sources */,
+                               4175EA0B216596DD00B46390 /* gen_scalers.c in Sources */,
+                               41EED7842152ED8E000F2A16 /* hadamard_neon.c in Sources */,
+                               41B675B7216599A80040A75D /* highbd_idct16x16_add_sse2.c in Sources */,
+                               41B675B9216599A80040A75D /* highbd_idct32x32_add_sse2.c in Sources */,
+                               41B675BB216599A80040A75D /* highbd_idct4x4_add_sse2.c in Sources */,
+                               41B675BD216599A80040A75D /* highbd_idct8x8_add_sse2.c in Sources */,
+                               41B675BF216599A80040A75D /* highbd_intrapred_intrin_sse2.c in Sources */,
+                               41B675C0216599A80040A75D /* highbd_intrapred_intrin_ssse3.c in Sources */,
+                               41CB0A30215C8DAB0097B8AA /* highbd_intrapred_sse2.asm in Sources */,
+                               41B675C1216599A80040A75D /* highbd_loopfilter_sse2.c in Sources */,
+                               41B675C2216599A80040A75D /* highbd_quantize_intrin_sse2.c in Sources */,
+                               41CB0A42215C8DC90097B8AA /* highbd_sad4d_sse2.asm in Sources */,
+                               41CB0A41215C8DC90097B8AA /* highbd_sad_sse2.asm in Sources */,
+                               41CB0A43215C8DC90097B8AA /* highbd_subpel_variance_impl_sse2.asm in Sources */,
+                               41CB0A44215C8DC90097B8AA /* highbd_variance_impl_sse2.asm in Sources */,
+                               41B675C3216599A80040A75D /* highbd_variance_sse2.c in Sources */,
+                               41EED79B2152ED8E000F2A16 /* idct16x16_1_add_neon.c in Sources */,
+                               41EED79C2152ED8E000F2A16 /* idct16x16_add_neon.c in Sources */,
+                               41EED79F2152ED8E000F2A16 /* idct32x32_135_add_neon.c in Sources */,
+                               41EED79D2152ED8E000F2A16 /* idct32x32_1_add_neon.c in Sources */,
+                               41EED79E2152ED8E000F2A16 /* idct32x32_34_add_neon.c in Sources */,
+                               41EED7A02152ED8E000F2A16 /* idct32x32_add_neon.c in Sources */,
+                               41EED7962152ED8E000F2A16 /* idct4x4_1_add_neon.c in Sources */,
+                               41EED7982152ED8E000F2A16 /* idct4x4_add_neon.c in Sources */,
+                               41EED7992152ED8E000F2A16 /* idct8x8_1_add_neon.c in Sources */,
+                               41EED79A2152ED8E000F2A16 /* idct8x8_add_neon.c in Sources */,
+                               41C62943212E2F1E002313D4 /* idct_blk.c in Sources */,
+                               41659C0A2165975700CCBDC2 /* idct_blk_mmx.c in Sources */,
+                               419100DC2152ECE700A6F17B /* idct_blk_neon.c in Sources */,
+                               41659C0B2165975700CCBDC2 /* idct_blk_sse2.c in Sources */,
+                               419100DD2152ECE700A6F17B /* idct_dequant_0_2x_neon.c in Sources */,
+                               419100DE2152ECE700A6F17B /* idct_dequant_full_2x_neon.c in Sources */,
+                               41C62944212E2F1E002313D4 /* idctllm.c in Sources */,
+                               41CB0A07215C8D760097B8AA /* idctllm_mmx.asm in Sources */,
+                               41CB0A08215C8D760097B8AA /* idctllm_sse2.asm in Sources */,
+                               41330A1A212E2BDF00280939 /* intrapred.c in Sources */,
+                               41EED7A22152ED8E000F2A16 /* intrapred_neon.c in Sources */,
+                               41CB0A45215C8DC90097B8AA /* intrapred_sse2.asm in Sources */,
+                               41CB0A46215C8DC90097B8AA /* intrapred_ssse3.asm in Sources */,
+                               41330A1B212E2BDF00280939 /* inv_txfm.c in Sources */,
+                               41C62925212E2DE9002313D4 /* inv_txfm_sse2.c in Sources */,
+                               41C62927212E2DE9002313D4 /* inv_txfm_ssse3.c in Sources */,
+                               41CB0A47215C8DC90097B8AA /* inv_wht_sse2.asm in Sources */,
+                               419100DF2152ECE700A6F17B /* iwalsh_neon.c in Sources */,
+                               41CB0A10215C8D760097B8AA /* iwalsh_sse2.asm in Sources */,
+                               416731B6212E0430001280EB /* lookahead.c in Sources */,
+                               41330A1C212E2BDF00280939 /* loopfilter.c in Sources */,
+                               419100D62152ECE200A6F17B /* loopfilter_arm.c in Sources */,
+                               41CB0A05215C8D760097B8AA /* loopfilter_block_sse2_x86_64.asm in Sources */,
+                               41C62945212E2F1E002313D4 /* loopfilter_filters.c in Sources */,
+                               41EED7A62152ED8E000F2A16 /* loopfilter_neon.c in Sources */,
+                               41CB0A06215C8D760097B8AA /* loopfilter_sse2.asm in Sources */,
+                               41C62907212E2DB0002313D4 /* loopfilter_sse2.c in Sources */,
+                               41659C0C2165975700CCBDC2 /* loopfilter_x86.c in Sources */,
+                               419100E02152ECE700A6F17B /* loopfiltersimplehorizontaledge_neon.c in Sources */,
+                               419100E12152ECE700A6F17B /* loopfiltersimpleverticaledge_neon.c in Sources */,
+                               419100E22152ECE700A6F17B /* mbloopfilter_neon.c in Sources */,
+                               41C62946212E2F1E002313D4 /* mbpitch.c in Sources */,
+                               416731B7212E0430001280EB /* mcomp.c in Sources */,
+                               41C62947212E2F1E002313D4 /* mfqe.c in Sources */,
+                               41CB0A09215C8D760097B8AA /* mfqe_sse2.asm in Sources */,
+                               41C62948212E2F1E002313D4 /* modecont.c in Sources */,
+                               416731B8212E0430001280EB /* modecosts.c in Sources */,
+                               416731B9212E0430001280EB /* mr_dissim.c in Sources */,
+                               41EED7BF2152F1FB000F2A16 /* onyx_if.c in Sources */,
+                               41CBAF9A212E039300DE1E1D /* onyxd_if.c in Sources */,
+                               416731D6212E0430001280EB /* pickinter.c in Sources */,
+                               416731BB212E0430001280EB /* picklpf.c in Sources */,
+                               41C62949212E2F1E002313D4 /* postproc.c in Sources */,
+                               41330A1D212E2BDF00280939 /* prob.c in Sources */,
+                               41330A2B212E2BDF00280939 /* psnr.c in Sources */,
+                               41330A1E212E2BDF00280939 /* psnrhvs.c in Sources */,
+                               41BA04E52165992800B527E0 /* quant_common.c in Sources */,
+                               41330A1F212E2BDF00280939 /* quantize.c in Sources */,
+                               41EED7A82152ED8E000F2A16 /* quantize_neon.c in Sources */,
+                               41C6291D212E2DE9002313D4 /* quantize_sse2.c in Sources */,
+                               41C62923212E2DE9002313D4 /* quantize_ssse3.c in Sources */,
+                               416731BC212E0430001280EB /* ratectrl.c in Sources */,
+                               416731BD212E0430001280EB /* rdopt.c in Sources */,
+                               41CB0A0D215C8D760097B8AA /* recon_mmx.asm in Sources */,
+                               41CB0A0B215C8D760097B8AA /* recon_sse2.asm in Sources */,
+                               41C6294A212E2F1E002313D4 /* reconinter.c in Sources */,
+                               41C6294B212E2F1E002313D4 /* reconintra.c in Sources */,
+                               41C6294C212E2F1E002313D4 /* reconintra4x4.c in Sources */,
+                               41C6294D212E2F1E002313D4 /* rtcd.c in Sources */,
+                               41EED7DC21531E5F000F2A16 /* sad.c in Sources */,
+                               41EED7AA2152ED8E000F2A16 /* sad4d_neon.c in Sources */,
+                               41CB0A4B215C8DC90097B8AA /* sad4d_sse2.asm in Sources */,
+                               41EED7A92152ED8E000F2A16 /* sad_neon.c in Sources */,
+                               41CB0A48215C8DC90097B8AA /* sad_sse2.asm in Sources */,
+                               41CB0A2A215C8DAB0097B8AA /* sad_sse3.asm in Sources */,
+                               41CB0A49215C8DC90097B8AA /* sad_sse4.asm in Sources */,
+                               41CB0A4A215C8DC90097B8AA /* sad_ssse3.asm in Sources */,
+                               416731BE212E0430001280EB /* segmentation.c in Sources */,
+                               41C6294E212E2F1E002313D4 /* setupintrarecon.c in Sources */,
+                               419100B22152EC9000A6F17B /* shortfdct_neon.c in Sources */,
+                               419100E32152ECE700A6F17B /* shortidct4x4llm_neon.c in Sources */,
+                               419100E42152ECE700A6F17B /* sixtappredict_neon.c in Sources */,
+                               41330A21212E2BDF00280939 /* skin_detection.c in Sources */,
+                               41CB0A4C215C8DC90097B8AA /* ssim_opt_x86_64.asm in Sources */,
+                               41EED7AC2152ED8E000F2A16 /* subpel_variance_neon.c in Sources */,
+                               41CB0A4D215C8DC90097B8AA /* subpel_variance_sse2.asm in Sources */,
+                               41CB0A04215C8D760097B8AA /* subpixel_mmx.asm in Sources */,
+                               41CB0A0F215C8D760097B8AA /* subpixel_sse2.asm in Sources */,
+                               41CB0A59215C90500097B8AA /* subpixel_ssse3.asm in Sources */,
+                               41330A23212E2BDF00280939 /* subtract.c in Sources */,
+                               41EED7AD2152ED8E000F2A16 /* subtract_neon.c in Sources */,
+                               41CB0A4E215C8DC90097B8AA /* subtract_sse2.asm in Sources */,
+                               41330A24212E2BDF00280939 /* sum_squares.c in Sources */,
+                               41C62928212E2DE9002313D4 /* sum_squares_sse2.c in Sources */,
+                               418B14DF2165959F0046E03F /* svc_encodeframe.c in Sources */,
+                               41C6294F212E2F1E002313D4 /* swapyv12buffer.c in Sources */,
+                               41659C0E2165977500CCBDC2 /* systemdependent.c in Sources */,
+                               416731CF212E0430001280EB /* temporal_filter.c in Sources */,
+                               41CB0A5D215C90750097B8AA /* temporal_filter_apply_sse2.asm in Sources */,
+                               41CBAF9B212E039300DE1E1D /* threading.c in Sources */,
+                               416731BF212E0430001280EB /* tokenize.c in Sources */,
+                               41C62950212E2F1E002313D4 /* treecoder.c in Sources */,
+                               416731C0212E0430001280EB /* treewriter.c in Sources */,
+                               41659C14216597B700CCBDC2 /* variance.c in Sources */,
+                               41EED7B02152ED8E000F2A16 /* variance_neon.c in Sources */,
+                               41C62922212E2DE9002313D4 /* variance_sse2.c in Sources */,
+                               41659C0D2165975700CCBDC2 /* vp8_asm_stubs.c in Sources */,
+                               4162BA37216596160044F344 /* vp8_cx_iface.c in Sources */,
+                               4162BA38216596160044F344 /* vp8_dx_iface.c in Sources */,
+                               41659C10216597A100CCBDC2 /* vp8_enc_stubs_sse2.c in Sources */,
+                               41C62951212E2F1E002313D4 /* vp8_loopfilter.c in Sources */,
+                               419100E52152ECE700A6F17B /* vp8_loopfilter_neon.c in Sources */,
+                               416731D7212E0430001280EB /* vp8_quantize.c in Sources */,
+                               41659C11216597A100CCBDC2 /* vp8_quantize_sse2.c in Sources */,
+                               41659C12216597A100CCBDC2 /* vp8_quantize_ssse3.c in Sources */,
+                               419100B32152EC9000A6F17B /* vp8_shortwalsh4x4_neon.c in Sources */,
+                               41C62952212E2F1E002313D4 /* vp8_skin_detection.c in Sources */,
+                               41C6290B212E2DB0002313D4 /* vpx_asm_stubs.c in Sources */,
+                               418B14E02165959F0046E03F /* vpx_codec.c in Sources */,
+                               41CB0A11215C8D940097B8AA /* vpx_config.asm in Sources */,
+                               4129408A212E0CC400AD95E7 /* vpx_config.c in Sources */,
+                               41330A26212E2BDF00280939 /* vpx_convolve.c in Sources */,
+                               41EED7B82152ED8E000F2A16 /* vpx_convolve8_neon.c in Sources */,
+                               41EED7B22152ED8E000F2A16 /* vpx_convolve_avg_neon.c in Sources */,
+                               41EED7B42152ED8E000F2A16 /* vpx_convolve_copy_neon.c in Sources */,
+                               41CB0A4F215C8DC90097B8AA /* vpx_convolve_copy_sse2.asm in Sources */,
+                               41EED7B52152ED8E000F2A16 /* vpx_convolve_neon.c in Sources */,
+                               418B14E12165959F0046E03F /* vpx_decoder.c in Sources */,
+                               41330A27212E2BDF00280939 /* vpx_dsp_rtcd.c in Sources */,
+                               418B14E22165959F0046E03F /* vpx_encoder.c in Sources */,
+                               41CB0A50215C8DC90097B8AA /* vpx_high_subpixel_8t_sse2.asm in Sources */,
+                               41CB0A3A215C8DAB0097B8AA /* vpx_high_subpixel_bilinear_sse2.asm in Sources */,
+                               418B14E32165959F0046E03F /* vpx_image.c in Sources */,
+                               41330A30212E2BF500280939 /* vpx_mem.c in Sources */,
+                               4175EA0C216596DD00B46390 /* vpx_scale.c in Sources */,
+                               41330A34212E2C1F00280939 /* vpx_scale_rtcd.c in Sources */,
+                               41EED7BA2152ED8E000F2A16 /* vpx_scaled_convolve8_neon.c in Sources */,
+                               41C6290D212E2DB0002313D4 /* vpx_subpixel_8t_intrin_ssse3.c in Sources */,
+                               41CB0A51215C8DC90097B8AA /* vpx_subpixel_8t_sse2.asm in Sources */,
+                               41CB0A52215C8DC90097B8AA /* vpx_subpixel_8t_ssse3.asm in Sources */,
+                               41CB0A53215C8DC90097B8AA /* vpx_subpixel_bilinear_sse2.asm in Sources */,
+                               41CB0A54215C8DC90097B8AA /* vpx_subpixel_bilinear_ssse3.asm in Sources */,
+                               41BAE3C0212E2C5B00E22482 /* vpx_thread.c in Sources */,
+                               41BAE3C2212E2C5B00E22482 /* vpx_write_yuv_frame.c in Sources */,
+                               4175EA0D216596DD00B46390 /* yv12config.c in Sources */,
+                               4175EA0E216596DD00B46390 /* yv12extend.c in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
</ins><span class="cx">           41F77D12215BE45E00E72967 /* Sources */ = {
</span><span class="cx">                  isa = PBXSourcesBuildPhase;
</span><span class="cx">                  buildActionMask = 2147483647;
</span><span class="lines">@@ -15747,6 +16373,8 @@
</span><span class="cx">                          5CDD841F1E439B2900621E92 /* legacy_encoded_audio_frame.cc in Sources */,
</span><span class="cx">                          5CDD84B81E43AF1300621E92 /* level_estimator_impl.cc in Sources */,
</span><span class="cx">                          5CDD865A1E43B8B500621E92 /* levinson_durbin.c in Sources */,
</span><ins>+                               41294094212E128D00AD95E7 /* libvpx_vp8_decoder.cc in Sources */,
+                               41294092212E128D00AD95E7 /* libvpx_vp8_encoder.cc in Sources */,
</ins><span class="cx">                           416D3BE6212731C200775F09 /* limiter.cc in Sources */,
</span><span class="cx">                          5CD284F61E6A60570094FDC8 /* localaudiosource.cc in Sources */,
</span><span class="cx">                          413A23EB1FE18E0800373E99 /* location.cc in Sources */,
</span><span class="lines">@@ -16027,6 +16655,7 @@
</span><span class="cx">                          4102F69221273206006AE8D7 /* rtcstatstraversal.cc in Sources */,
</span><span class="cx">                          41ECEAB720630108009D5141 /* RTCVideoCodec.mm in Sources */,
</span><span class="cx">                          41F773FD215AF94C00E72967 /* RTCVideoCodecH264.mm in Sources */,
</span><ins>+                               418B14DE2165951E0046E03F /* RTCVideoCodecVP8.mm in Sources */,
</ins><span class="cx">                           41AF2D14212CD6AF00D033D5 /* RTCVideoDecoderH264.mm in Sources */,
</span><span class="cx">                          41ECEAC4206411E5009D5141 /* RTCVideoEncoderH264.mm in Sources */,
</span><span class="cx">                          41ECEAEA20641812009D5141 /* RTCVideoEncoderSettings.mm in Sources */,
</span><span class="lines">@@ -16356,6 +16985,21 @@
</span><span class="cx"> /* End PBXSourcesBuildPhase section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXTargetDependency section */
</span><ins>+               4105EB6A212E01D2008C0C20 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 5C63F6611E414AB6002CA531 /* Copy webrtc headers */;
+                       targetProxy = 4105EB6B212E01D2008C0C20 /* PBXContainerItemProxy */;
+               };
+               411ED040212E0811004320BA /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 4105EB69212E01D2008C0C20 /* vpx */;
+                       targetProxy = 411ED03F212E0811004320BA /* PBXContainerItemProxy */;
+               };
+               41BE7174215BF42300A7B196 /* PBXTargetDependency */ = {
+                       isa = PBXTargetDependency;
+                       target = 41F77D15215BE45E00E72967 /* yasm */;
+                       targetProxy = 41BE7173215BF42300A7B196 /* PBXContainerItemProxy */;
+               };
</ins><span class="cx">           5C08848C1E4A97E300403995 /* PBXTargetDependency */ = {
</span><span class="cx">                  isa = PBXTargetDependency;
</span><span class="cx">                  target = 5C63F6611E414AB6002CA531 /* Copy webrtc headers */;
</span><span class="lines">@@ -16424,6 +17068,45 @@
</span><span class="cx"> /* End PBXTargetDependency section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin XCBuildConfiguration section */
</span><ins>+               4105EB80212E01D2008C0C20 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 411ED035212E05DE004320BA /* libvpx.xcconfig */;
+                       buildSettings = {
+                               CLANG_WARN_STRICT_PROTOTYPES = NO;
+                               CLANG_X86_VECTOR_INSTRUCTIONS = default;
+                               HEADER_SEARCH_PATHS = "$(inherited)";
+                               OTHER_CFLAGS = "";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               USE_HEADERMAP = NO;
+                       };
+                       name = Debug;
+               };
+               4105EB81212E01D2008C0C20 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 411ED035212E05DE004320BA /* libvpx.xcconfig */;
+                       buildSettings = {
+                               CLANG_WARN_STRICT_PROTOTYPES = NO;
+                               CLANG_X86_VECTOR_INSTRUCTIONS = default;
+                               HEADER_SEARCH_PATHS = "$(inherited)";
+                               OTHER_CFLAGS = "";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               USE_HEADERMAP = NO;
+                       };
+                       name = Release;
+               };
+               4105EB82212E01D2008C0C20 /* Production */ = {
+                       isa = XCBuildConfiguration;
+                       baseConfigurationReference = 411ED035212E05DE004320BA /* libvpx.xcconfig */;
+                       buildSettings = {
+                               CLANG_WARN_STRICT_PROTOTYPES = NO;
+                               CLANG_X86_VECTOR_INSTRUCTIONS = default;
+                               HEADER_SEARCH_PATHS = "$(inherited)";
+                               OTHER_CFLAGS = "";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               USE_HEADERMAP = NO;
+                       };
+                       name = Production;
+               };
</ins><span class="cx">           41F77D1B215BE45E00E72967 /* Debug */ = {
</span><span class="cx">                  isa = XCBuildConfiguration;
</span><span class="cx">                  baseConfigurationReference = 41F77D1E215BE4AD00E72967 /* yasm.xcconfig */;
</span><span class="lines">@@ -16852,32 +17535,7 @@
</span><span class="cx">                                  "$(inherited)",
</span><span class="cx">                                  "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
</span><span class="cx">                          );
</span><del>-                               HEADER_SEARCH_PATHS = (
-                                       Source,
-                                       Source/third_party/jsoncpp/source/include,
-                                       Source/third_party/libsrtp/crypto/include,
-                                       Source/third_party/libsrtp/include,
-                                       Source/third_party/boringssl/src/include,
-                                       Source/third_party/libyuv/include,
-                                       Source/third_party/usrsctp,
-                                       Source/third_party/usrsctp/usrsctplib,
-                                       Source/webrtc/sdk/objc/Framework/Headers,
-                                       Source/webrtc/common_audio/signal_processing/include,
-                                       Source/webrtc/modules/audio_coding/codecs/isac/main/include,
-                                       Source/third_party/opus/src/celt,
-                                       Source/third_party/opus/src/include,
-                                       Source/third_party/opus/src/src,
-                                       Source/webrtc/modules/audio_device/mac,
-                                       Source/third_party/usrsctp/usrsctplib/usrsctplib/netinet,
-                                       Source/webrtc/modules/audio_device/ios,
-                                       Source/webrtc,
-                                       Source/webrtc/sdk/objc/Framework/Classes/,
-                                       Source/third_party/libsrtp/config,
-                                       Source/webrtc/sdk/objc/Framework/Classes/Common,
-                                       Source/webrtc/sdk/objc/Framework/Classes/Video,
-                                       Source/webrtc/sdk/objc/Framework/Classes/PeerConnection,
-                                       "Source/third_party/abseil-cpp",
-                               );
</del><ins>+                                HEADER_SEARCH_PATHS = "$(inherited)";
</ins><span class="cx">                           OTHER_CFLAGS = "";
</span><span class="cx">                  };
</span><span class="cx">                  name = Production;
</span><span class="lines">@@ -16905,32 +17563,7 @@
</span><span class="cx">                                  "$(inherited)",
</span><span class="cx">                                  "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
</span><span class="cx">                          );
</span><del>-                               HEADER_SEARCH_PATHS = (
-                                       Source,
-                                       Source/third_party/jsoncpp/source/include,
-                                       Source/third_party/libsrtp/crypto/include,
-                                       Source/third_party/libsrtp/include,
-                                       Source/third_party/boringssl/src/include,
-                                       Source/third_party/libyuv/include,
-                                       Source/third_party/usrsctp,
-                                       Source/third_party/usrsctp/usrsctplib,
-                                       Source/webrtc/sdk/objc/Framework/Headers,
-                                       Source/webrtc/common_audio/signal_processing/include,
-                                       Source/webrtc/modules/audio_coding/codecs/isac/main/include,
-                                       Source/third_party/opus/src/celt,
-                                       Source/third_party/opus/src/include,
-                                       Source/third_party/opus/src/src,
-                                       Source/webrtc/modules/audio_device/mac,
-                                       Source/third_party/usrsctp/usrsctplib/usrsctplib/netinet,
-                                       Source/webrtc/modules/audio_device/ios,
-                                       Source/webrtc,
-                                       Source/webrtc/sdk/objc/Framework/Classes/,
-                                       Source/third_party/libsrtp/config,
-                                       Source/webrtc/sdk/objc/Framework/Classes/Common,
-                                       Source/webrtc/sdk/objc/Framework/Classes/Video,
-                                       Source/webrtc/sdk/objc/Framework/Classes/PeerConnection,
-                                       "Source/third_party/abseil-cpp",
-                               );
</del><ins>+                                HEADER_SEARCH_PATHS = "$(inherited)";
</ins><span class="cx">                   };
</span><span class="cx">                  name = Debug;
</span><span class="cx">          };
</span><span class="lines">@@ -16942,32 +17575,7 @@
</span><span class="cx">                                  "$(inherited)",
</span><span class="cx">                                  "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
</span><span class="cx">                          );
</span><del>-                               HEADER_SEARCH_PATHS = (
-                                       Source,
-                                       Source/third_party/jsoncpp/source/include,
-                                       Source/third_party/libsrtp/crypto/include,
-                                       Source/third_party/libsrtp/include,
-                                       Source/third_party/boringssl/src/include,
-                                       Source/third_party/libyuv/include,
-                                       Source/third_party/usrsctp,
-                                       Source/third_party/usrsctp/usrsctplib,
-                                       Source/webrtc/sdk/objc/Framework/Headers,
-                                       Source/webrtc/common_audio/signal_processing/include,
-                                       Source/webrtc/modules/audio_coding/codecs/isac/main/include,
-                                       Source/third_party/opus/src/celt,
-                                       Source/third_party/opus/src/include,
-                                       Source/third_party/opus/src/src,
-                                       Source/webrtc/modules/audio_device/mac,
-                                       Source/third_party/usrsctp/usrsctplib/usrsctplib/netinet,
-                                       Source/webrtc/modules/audio_device/ios,
-                                       Source/webrtc,
-                                       Source/webrtc/sdk/objc/Framework/Classes/,
-                                       Source/third_party/libsrtp/config,
-                                       Source/webrtc/sdk/objc/Framework/Classes/Common,
-                                       Source/webrtc/sdk/objc/Framework/Classes/Video,
-                                       Source/webrtc/sdk/objc/Framework/Classes/PeerConnection,
-                                       "Source/third_party/abseil-cpp",
-                               );
</del><ins>+                                HEADER_SEARCH_PATHS = "$(inherited)";
</ins><span class="cx">                           OTHER_CFLAGS = "";
</span><span class="cx">                  };
</span><span class="cx">                  name = Release;
</span><span class="lines">@@ -16975,6 +17583,16 @@
</span><span class="cx"> /* End XCBuildConfiguration section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin XCConfigurationList section */
</span><ins>+               4105EB7F212E01D2008C0C20 /* Build configuration list for PBXNativeTarget "vpx" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               4105EB80212E01D2008C0C20 /* Debug */,
+                               4105EB81212E01D2008C0C20 /* Release */,
+                               4105EB82212E01D2008C0C20 /* Production */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Production;
+               };
</ins><span class="cx">           41F77D1A215BE45E00E72967 /* Build configuration list for PBXNativeTarget "yasm" */ = {
</span><span class="cx">                  isa = XCConfigurationList;
</span><span class="cx">                  buildConfigurations = (
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebCore/ChangeLog      2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2018-10-03  Youenn Fablet  <youenn@apple.com>
+
+        Add VP8 support to WebRTC
+        https://bugs.webkit.org/show_bug.cgi?id=189976
+
+        Reviewed by Eric Carlson.
+
+        Add a runtime flag to control activation of VP8 codec.
+        Bind this runtime flag to the video codec factories.
+        Test: webrtc/video-mute-vp8.html
+
+        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
+        (WebCore::createLibWebRTCPeerConnectionBackend):
+        * page/RuntimeEnabledFeatures.h:
+        (WebCore::RuntimeEnabledFeatures::webRTCVP8CodecEnabled const):
+        (WebCore::RuntimeEnabledFeatures::setWebRTCVP8CodecEnabled):
+        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
+        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
+        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
+        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
+        * testing/Internals.cpp:
+        (WebCore::Internals::resetToConsistentState):
+        Enable VP8 codec for tests.
+
</ins><span class="cx"> 2018-09-28  Jiewen Tan  <jiewen_tan@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [WebCrypto] ECDSA could not deal with invalid signature inputs
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediastreamlibwebrtcLibWebRTCPeerConnectionBackendcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp    2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp       2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -56,6 +56,10 @@
</span><span class="cx">     auto* page = downcast<Document>(*peerConnection.scriptExecutionContext()).page();
</span><span class="cx">     if (!page)
</span><span class="cx">         return nullptr;
</span><ins>+
+#if USE(LIBWEBRTC)
+    page->libWebRTCProvider().supportsVP8(RuntimeEnabledFeatures::sharedFeatures().webRTCVP8CodecEnabled());
+#endif
</ins><span class="cx">     return std::make_unique<LibWebRTCPeerConnectionBackend>(peerConnection, page->libWebRTCProvider());
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageRuntimeEnabledFeaturesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/RuntimeEnabledFeatures.h (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/RuntimeEnabledFeatures.h       2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebCore/page/RuntimeEnabledFeatures.h  2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -190,6 +190,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><ins>+    bool webRTCVP8CodecEnabled() const { return m_isWebRTCVP8CodecEnabled; }
+    void setWebRTCVP8CodecEnabled(bool isEnabled) { m_isWebRTCVP8CodecEnabled = isEnabled; }
</ins><span class="cx">     bool webRTCUnifiedPlanEnabled() const { return m_isWebRTCUnifiedPlanEnabled; }
</span><span class="cx">     void setWebRTCUnifiedPlanEnabled(bool isEnabled) { m_isWebRTCUnifiedPlanEnabled = isEnabled; }
</span><span class="cx">     bool peerConnectionEnabled() const { return m_isPeerConnectionEnabled; }
</span><span class="lines">@@ -348,6 +350,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_RTC)
</span><ins>+    bool m_isWebRTCVP8CodecEnabled { false };
</ins><span class="cx">     bool m_isWebRTCUnifiedPlanEnabled { true };
</span><span class="cx">     bool m_isPeerConnectionEnabled { true };
</span><span class="cx">     bool m_mdnsICECandidatesEnabled { false };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamlibwebrtcLibWebRTCProviderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h  2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h     2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -109,6 +109,7 @@
</span><span class="cx">     void disableEnumeratingAllNetworkInterfaces();
</span><span class="cx">     void enableEnumeratingAllNetworkInterfaces();
</span><span class="cx"> 
</span><ins>+    void supportsVP8(bool value) { m_supportsVP8 = value; }
</ins><span class="cx">     virtual void disableNonLocalhostConnections() { m_disableNonLocalhostConnections = true; }
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="lines">@@ -126,6 +127,7 @@
</span><span class="cx"> 
</span><span class="cx">     rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> m_factory;
</span><span class="cx">     bool m_disableNonLocalhostConnections { false };
</span><ins>+    bool m_supportsVP8 { false };
</ins><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmediastreamlibwebrtcLibWebRTCProviderCocoacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp   2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp      2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -57,12 +57,14 @@
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr<webrtc::VideoDecoderFactory> LibWebRTCProviderCocoa::createDecoderFactory()
</span><span class="cx"> {
</span><del>-    return webrtc::createWebKitDecoderFactory();
</del><ins>+    auto codecSupport = m_supportsVP8 ? webrtc::WebKitCodecSupport::H264AndVP8 : webrtc::WebKitCodecSupport::H264;
+    return webrtc::createWebKitDecoderFactory(codecSupport);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr<webrtc::VideoEncoderFactory> LibWebRTCProviderCocoa::createEncoderFactory()
</span><span class="cx"> {
</span><del>-    return webrtc::createWebKitEncoderFactory();
</del><ins>+    auto codecSupport = m_supportsVP8 ? webrtc::WebKitCodecSupport::H264AndVP8 : webrtc::WebKitCodecSupport::H264;
+    return webrtc::createWebKitEncoderFactory(codecSupport);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void LibWebRTCProviderCocoa::setActive(bool value)
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.cpp (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.cpp       2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebCore/testing/Internals.cpp  2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -503,7 +503,7 @@
</span><span class="cx">     auto& rtcProvider = page.libWebRTCProvider();
</span><span class="cx">     WebCore::useRealRTCPeerConnectionFactory(rtcProvider);
</span><span class="cx">     rtcProvider.disableNonLocalhostConnections();
</span><del>-    RuntimeEnabledFeatures::sharedFeatures().setWebRTCUnifiedPlanEnabled(true);
</del><ins>+    RuntimeEnabledFeatures::sharedFeatures().setWebRTCVP8CodecEnabled(true);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     page.settings().setStorageAccessAPIEnabled(false);
</span></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog    2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebKit/ChangeLog       2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2018-10-03  Youenn Fablet  <youenn@apple.com>
+
+        Add VP8 support to WebRTC
+        https://bugs.webkit.org/show_bug.cgi?id=189976
+
+        Reviewed by Eric Carlson.
+
+        * Shared/WebPreferences.yaml:
+
</ins><span class="cx"> 2018-10-03  Zamiul Haque  <zhaque@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Search does not cancel after number of matching terms exceed set max limit
</span></span></pre></div>
<a id="trunkSourceWebKitSharedWebPreferencesyaml"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Shared/WebPreferences.yaml (236820 => 236821)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Shared/WebPreferences.yaml   2018-10-04 01:32:02 UTC (rev 236820)
+++ trunk/Source/WebKit/Shared/WebPreferences.yaml      2018-10-04 01:53:27 UTC (rev 236821)
</span><span class="lines">@@ -492,6 +492,15 @@
</span><span class="cx">   humanReadableDescription: "Use WebRTC Unified Plan"
</span><span class="cx">   category: experimental
</span><span class="cx"> 
</span><ins>+WebRTCVP8CodecEnabled:
+  type: bool
+  defaultValue: false
+  webcoreBinding: RuntimeEnabledFeatures
+  condition: ENABLE(WEB_RTC)
+  humanReadableName: "WebRTC VP8 codec"
+  humanReadableDescription: "Enable WebRTC VP8 codec"
+  category: experimental
+
</ins><span class="cx"> UseLegacyTextAlignPositionedElementBehavior:
</span><span class="cx">   type: bool
</span><span class="cx">   defaultValue: false
</span></span></pre>
</div>
</div>

</body>
</html>